• このエントリーをはてなブックマークに追加

【awk】連続する特殊文字を見付けるスクリプト

  • このエントリーをはてなブックマークに追加

awk2
zaco muraです。

数日前、自分の席で作業していると後輩から
「特殊文字を判定するスクリプトってawkで書けないっすかね~?」
と聞かれました。

たぶんできるよと答えたんですが、少し条件が複雑で
「特殊文字が2文字続いた場合のみ判定」という内容でした。

それはやったことないので、調べてみました。
結果、できました。

せっかくなので載せておきます。あまり需要は無さそうですが。。

特殊文字が2文字続いた場合に表示するスクリプト

#
# 特殊文字が2文字続いた場合に表示するスクリプト
#
awk -v i=0,flag=0,toku=0 '{for(i=1;i<=length($0);i++){char=substr($0,i,1) ; if(flag==1 && char!~/[[:alnum:]]/){print(toku char)};flag=0; if(char!~/[[:alnum:]]/){toku=char;flag=1}}}' file.txt

実行結果はこんな感じ

[root@server1 ~]# cat file.txt
aaaacd
abd!c
abe!\c
a#52d)8
!$}\123c$

[root@server1 ~]#awk -v i=0,flag=0,toku=0 '{for(i=1;i<=length($0);i++){char=substr($0,i,1) ; if(flag==1 && char!~/[[:alnum:]]/){print(toku char)};flag=0; if(char!~/[[:alnum:]]/){toku=char;flag=1}}}' file.txt
!\
!$
$}
}\

おまけ

ちなみに、作成過程で「特殊文字があったら次の文字とセットで表示」というのも作りました。

#
# 特殊文字があったら次の文字とセットで表示するスクリプト
#
awk -v i=0,flag=0,toku=0 '{for(i=1;i<=length($0);i++){char=substr($0,i,1) ; if(flag==1){print(toku char);flag=0}; if(char!~/[[:alnum:]]/){toku=char;flag=1}}}' file.txt

実行結果はこんな感じになります

[root@server1 ~]# cat file.txt
aaaacd
abd!c
abe!\c
a#52d)8
!$}\123c$

[root@server1 ~]# awk -v i=0,flag=0,toku=0 '{for(i=1;i<=length($0);i++){char=substr($0,i,1) ; if(flag==1){print(toku char);flag=0}; if(char!~/[[:alnum:]]/){toku=char;flag=1}}}' file.txt
!c
!\
\c
#5
)8
!$
$}
}\
\1

awkでは正規表現でアルファベット・数字を判定する[:alnum:]というのが使えるようで、便利です。

やはりawkは最強です。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link