awkで最後の行(最終行)のみ処理を行わせる
Pocket

awkで、最後の行のみを出力して処理を行わせる場合、以下のようにすればよい。

awk 'END{処理内容}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt
1 aaaa
2 bbbb
3 cccc
4 dddd
5 eeee
6 ffff
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 最終行のみ表示
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt | awk 'END{print}'
6 ffff
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 最終行のみ表示させて置換
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt | awk 'END{gsub("f", "q");print}'
6 qqqq
Sponsored Links

他の行は普通に出力させ、最後の行だけに処理をさせる場合、ちょっと面倒くさい。
個人的に一番手っ取り早いと思う書き方としては、ifで判断できるよう、ファイル自体の行数を事前に取得させてしまう方法だろう。

awk -v eof=$(wc -l <ファイルPATH) '{if (NR==eof) 処理内容;else print $0}' ファイルPATH
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt
1 aaaa
2 bbbb
3 cccc
4 dddd
5 eeee
6 ffff
[root@BS-PUB-CENT7-01 ~]# awk -v eof=$(wc -l
Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。