じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

awk であそぼ!!!

ここではコマンドの使い方について詳しく説明することはありません。文字どうり遊ぶだけなので都度、引数やオプションは調べながら自分で工夫してみてください。

 

seq コマンドで数字を生成します。

$seq 1 5
1
2
3
4
5

出来ました。

 

このままでは面白くないので

$seq 1 20 |xargs -n 5 > data

$cat data
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

これで準備はOKです。

awkで簡単なテキスト処理をしていきます。

3列目を出力

$cat data | awk '{print $3}'
3
8
13
18

3列目が10より大きい行を出力

$cat data | awk '$3 >10'
11 12 13 14 15
16 17 18 19 20

3行目が13の行を出力

$cat data | awk '$3==13'

11 12 13 14 15

 

→もっと遊んでしてみる。

次はawkを使って数字に手を加えていきます。

一列目と二列目を乗算して出力

$cat data | awk '{print $1*$2}'
2
42
132
272

一列目を増殖させる。

$cat data | awk '{print $1,$1,$1,$1}'

1 1 1 1
6 6 6 6
11 11 11 11
16 16 16 16

 

→制御構文

awkもif やforなどを使うことが出来ます。

1列目が奇数か偶数か判断させる。

cat data | awk '{if($1%2==0){print $1,"偶数"}else{print $1,"奇数"}}'

1 奇数
6 偶数
11 奇数
16 偶数

for 文を使ってdataの中身をすべて判断させる。

$cat data | awk '{for(a=1;a<=5;a++){if($a%2==0){print $a,"偶数"}else{print $a,"奇数"}}}'

1 奇数
2 偶数
3 奇数
4 偶数
5 奇数
6 偶数
7 奇数
8 偶数
9 奇数
10 偶数
11 奇数
12 偶数
13 奇数
14 偶数
15 奇数
16 偶数
17 奇数
18 偶数
19 奇数
20 偶数

 

このままでは汚いので最後に

$cat data | awk '{for(a=1;a<=NF;a++){if($a%2==0){print $a,"偶数"}else{print $a,"奇数"}}}'|xargs -n 10

1 奇数 2 偶数 3 奇数 4 偶数 5 奇数
6 偶数 7 奇数 8 偶数 9 奇数 10 偶数
11 奇数 12 偶数 13 奇数 14 偶数 15 奇数
16 偶数 17 奇数 18 偶数 19 奇数 20 偶数

 

NRやNFなどの特別な変数もあるので使うととても便利です。

 

exit