awkはprint文に、リダイレクト">"を設定して、ファイルに出力することができる。
ワンライナーで簡単な例を示すと、、、
$ awk 'BEGIN{print "sample" > "out.txt"}'
$ cat out.txt
sample
単順に、sampleという文字列を、out.txtにファイル出力しています。
リダイレクトの後ろに、ダブルコーテーション"で囲んで出力ファイル名out.txtを書いています。
データ解析などの中間ファイルとして、ファイルに出力しながらシステムを組んでいくと、
わかりやすくメンテナンス性の高いアーキテクチャが出来上がると思います。
自分は、デバッグ性を上げるためにもよく行います。
print文毎に出力ファイルを設定して、複数ファイルに出力する
print文毎に異なる出力ファイルを設定すれば、用途に応じて異なったファイルにそれぞれ出力できます。
下記にサンプルを書きました。
in.txtを1行毎に処理し、out1.txtとout2.txtにそれぞれ異なるフォーマットで日付を出力しています。
$ cat in.txt
2017 1 1
2017 1 2
$ cat sample.awk
#!/bin/sh
cat in.txt | awk '
{
year = $1
month = $2
day = $3
print year "年" month "月" day "日" >"out1.txt"
print year "/" month "/" day >"out2.txt"
}
'
$ ./sample.awk
$ cat out1.txt
2017年1月1日
2017年1月2日
$ cat out2.txt
2017/1/1
2017/1/2
