awk/sed
awk
テキスト処理用のスクリプト言語
本来の用途よりも狭い使い方ではあるが、自分はシェルスクリプトの中で、
C言語のprintfのような用途で使っていた。
C言語のprintfのような用途で使っていた。
ログファイルからcsv形式に変換したり、特定の項目を出力するなど
簡単なテキスト処理に使っていた。
簡単なテキスト処理に使っていた。
実行例
$ cat a.txt 1 -2 3.2 4.3 5.345 6 -7.5 8.2 9 0
printの例
$ awk '{print $1}' a.txt 1 6
printfの例
$ awk '{printf "%4d,\t%4.2f,\t%4.2f,\t%4.2f\n",$1,$2,$3,$4+$5}' a.txt 1, -2.00, 3.20, 8.64 6, -7.50, 8.20, 9.00
使ったことは無かったが{}の前に正規表現を書けば一致する行だけ処理できるようだ。
行の先頭(^)が1になっている行の5番目の要素を出力
行の先頭(^)が1になっている行の5番目の要素を出力
$ awk '/^1/ {print $5}' a.txt 5.345
行の中に任意の文字(".*")のあとに .3 が存在する行の1番目を出力
$ awk '/.*\.3/ {print $1}' a.txt 1
sed
テキスト変換に使うコマンド
実行例
$ cat a.txt 1 -2 3.2 4.3 5.345 6 -7.5 8.2 9 0
1 を 4 に書き換える
$ sed "s/1/4/g" a.txt 4 -2 3.2 4.3 5.345 6 -7.5 8.2 9 0
.2 を .9 に書き換える
$ sed "s/\.2/\.9/g" a.txt 1 -2 3.9 4.3 5.345 6 -7.5 8.9 9 0
各行から3を一度だけ消す
$ sed "s/3//" a.txt 1 -2 .2 4.3 5.345 6 -7.5 8.2 9 0
各行から3をすべて消す
$ sed "s/3//g" a.txt 1 -2 .2 4. 5.45 6 -7.5 8.2 9 0