awkのNR変数で行数に応じた処理をする
スポンサーリンク
awkの組み込み変数NR
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
NR変数で、処理中の行数が取得できます。
便利な変数です。
※MACターミナル(BSD系)での動作確認です。
例えば、下記のin.txtがあったとします。
$ cat in.txt L1,awk,3 L2,find,7 L3,grep,9 L4,grep,6
print出力で、NR変数を出力してみます。
先頭に処理中の行数を付与しています。
$ cat in.txt | awk -F"," '{print NR "行目を処理" , $0}' 1行目を処理 L1,awk,3 2行目を処理 L2,find,7 3行目を処理 L3,grep,9 4行目を処理 L4,grep,6
例えば、特定の行数のみ表示したい場合、今回は2行目を表示してみます。
$ cat in.txt | awk -F"," 'NR == 2{print NR "行目を処理" , $0}' 2行目を処理 L2,find,7
スポンサーリンク
NR変数を使ったサンプルコード
いくつかサンプルコードを載せてみます。
2行目以降の3列目の総和を求める。
参考:grepを使って行単位で処理するのも便利です
参考:grepとawkのワンライナーで特定の行と列を指定して総和を算出
$ cat in.txt | awk -F"," 'NR >= 2{sum += $3} END{print "sum=" sum}' sum=22
丁寧にif分を使って、スクリプトを書いてみました。
参考:awkのif文のサンプルコード
2行目と4行目の行をprint出力しています。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' BEGIN{ OFS = " ," } { if(NR == 2 || NR == 4){ print NR ,$0 } } '
下記が実行結果になります。
$ ./sample.awk 2 ,L2,find,7 4 ,L4,grep,6
スポンサーリンク