shell整理
個人用メモ。
awk
フィールド抜き取り
$ cat table.txt 1 hoge 10 2 fuga 90 3 foo 40 4 bar 50 $ cat table.txt | awk '{print $1, $3}' 1 10 2 90 3 40 4 50
整形
$ cat table.txt | awk '{printf("%-10s %5d\n", $1, $3)}' 1 10 2 90 3 40 4 50
計算・BEGIN/END
$ seq 1 10 | awk 'BEGIN{print "sum"; sum_head=100000}{if($1%2==1){sum_a+=$1}else{sum_b+=$1}}END{printf("%10d\n%10d\n%10s\n",sum_a,sum_b,sum_a+sum_b+sum_head)}' sum 25 30 100055
行の抜き取り(行指定)
$ seq 1 12 | xargs -n 3 | awk '{if(NR>=2 && NR<=3)print}' 4 5 6 7 8 9
行の抜き取り(条件一致)
$ seq 1 12 | xargs -n 3 | awk '{if(/^4/)print}' 4 5 6 $ seq 1 12 | xargs -n 3 | awk '{if(/11/)print}' 10 11 12
条件に合うものを見つける(key-value的な使い方)
$ cat table.txt id name 1 hoge 2 fuga 3 foo 4 bar // -v で引数を渡す $ id="3"; cat table.txt | awk -v search_id=$id '{if($1==search_id){print $2}}' foo
sed
行の抜き取り(行指定)
$ seq 1 12 | xargs -n 3 | sed -n '2,3p' 4 5 6 7 8 9
一致抜き取り(条件一致)
$ seq 1 12 | xargs -n 3 | sed -n '/^4/p' 4 5 6 $ seq 1 12 | xargs -n 3 | sed -n '/11/p' 10 11 12