思い出は銀の弾

ひよっこエンジニアが調べたことや経験したことをまとめます!

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