Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ: メールフォーム
コマンド | 説明 |
---|---|
awk | UNIX上で開発されたフィールド指向のテキスト処理スクリプト言語 |
2行目と3行目を表示する (パイプ経由)
% cat hoge.txt | awk 'NR==2,NR==3 { print }'
2行目と3行目を表示する (ファイルから読み込む)
% awk 'NR==2,NR==3 { print }' < hoge.txt
条件分岐 (if else)
% grep 'needle' hoge.txt \ | awk '{if($2==OK) ok++; else ng++}; END {print ok; print ng}'
第2フィールドの「OK」をカウントし、同時に「OK以外」もカウントする。
演算子 && ||
% some_command | awk '{if($1==A && $2==B) print}' % some_command | awk '{if($1==A || $2==B) print}'
第2フィールドが「1以上」の行のみ書き出す
% awk $2>=1{print $0} < hoge.txt > fuga.txt
⇒ $0 は行全体を表す
% awk $2>=1{print} < hoge.txt > fuga.txt
⇒ print の引数を省略した場合、デフォルトは行全体
第3,4,5フィールドを合計して「9以上」だったら、合計値と行全体を出力する
% grep 'needle' hoge.txt | awk '{sum=$3+$4+$5; if(sum>=9)print sum" "$0}'
第2フィールドの文字列の長さが「10」だったら出力する
% awk '{if(length($2)==10) print}' < less hoge.txt
肯定の正規表現 (line ~ /regex/ )
% cal 2007 | awk '$1 ~ /J/' January February March July August September
否定の正規表現 (line !~ /regex/ )
% cal 2007 | awk '$1 !~ /J/' 2007 Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 2 3 7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 : :
% less hoge.txt 550 1 550 1 3000 1 3000 1 3000 1 10001 1 10002 1 10002 1 10002 1 10002 1 10003 1 % less hoge.txt \ | awk '{a[$1] += $2} END{for(key in a) print key"\t"a[key]}' 550 2 3000 3 10001 1 10002 4 10003 1
% export _VAR=123 % less hoge.txt | awk '{if(ENVIRON["_VAR"]<=$1) print $0;}'
% less ketuban.txt 1 2 5 6 8 10 % less ketuban.txt | sort -n \ | awk '{if(a+1 < $1){for(i=a+1; i<=$1; i++) print i} else {print} a=$1}' 1 2 3 4 5 6 7 8 9 10
ちなみに、ワンライナーをインデントすると
awk '{ if(a+1 < $1){ for(i=a+1; i<=$1; i++) print i } else { print } a=$1 }'