awkで行から数字のみを抜き出す

そういう処理について見かけたので、念のため残しておく。
awkで行に含まれる数字のみを抜き出すには、区切り文字として数字以外を指定して、各列を取得してやることで実現できる。

例えば、ファイルの各行に含まれている数字を1行づつ抽出する場合、以下のようにコマンドを実行する。

awk -F '[^0-9]+' '{for(i=1;i<=NF;i++){if($i!="")print $i}}' test1.txt
[root@BS-PUB-CENT7-01 ~]# cat test1.txt
111AAA222BBB333
CCC444DDD555EEE
666FFF777GGG888
[root@BS-PUB-CENT7-01 ~]# awk -F '[^0-9]+' '{for(i=1;i<=NF;i++){if($i!="")print $i}}' test1.txt
111
222
333
444
555
666
777
888
Sponsored Links

基本はこちらで良いと思うが、もし同じ行で数字だけを抽出するような処理をする場合、以下のように記述することもできる。

awk -F '[^0-9]+' 'BEGIN{OFS=""}{$1=$1;print $0}' test1.txt
[root@BS-PUB-CENT7-01 ~]# cat test1.txt
111AAA222BBB333
CCC444DDD555EEE
666FFF777GGG888
[root@BS-PUB-CENT7-01 ~]# awk -F '[^0-9]+' 'BEGIN{OFS=""}{$1=$1;print $0}' test1.txt
111222333
444555
666777888
[root@BS-PUB-CENT7-01 ~]# awk -F '[^0-9]+' 'BEGIN{OFS=","}{$1=$1;print $0}' test1.txt
111,222,333
,444,555,
666,777,888

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*