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
}'