LoginSignup
9
1

awkコマンドでファイルの行数を使いたい

Posted at

この記事は?

awkコマンドを使っている時、条件にファイルの行数を使いたい 場面がありました。しかし、awkコマンドにはファイル行数を表す予約語などありません。その時調べた解決方法を備忘録として残しておきます。awkコマンドの使い方については割愛します。

awkとは?

テキスト処理のためのプログラミング言語およびコマンドラインユーティリティです。テキストデータの「パターンマッチング」と「データ加工」を行うことができます。
LinuxやMacのほとんどで追加インストールなしに使うことができます。

サンプル

sample.txt
aaa
bbb
ccc
ddd
eee

sample.txtファイルの中身は5行

サンプルコマンド

awk -v line_count="$(wc -l < sample.txt)" '{
   print $0 line_count;
}' sample.txt

実行結果
aaa       5
bbb       5
ccc       5
ddd       5
eee       5

実行結果の「5」がsample.txtの行数

サンプルコマンド説明

wcコマンドを使って行数を取得し、それをawkの変数に代入しています。

-v line_count="$(wc -l < sample.txt)"

END ではダメなの?

awkの “END” ブロックを使うと最終行だけ特別な処理を書くことができます。
しかし、通常の行ではある処理を行って、最終行だけはその処理を抑制したいといったケースがあります。そういった場合は”END” ブロックだけでは実現できません。

どうしてawkの標準機能にないんだろ?

awkコマンドそのものにファイルの行数を表す予約語などがあれば嬉しいのですが、そうするとファイルを二度読みしなくてはならないので、そういった機能は組み込まれていないのかなと思いました。
(パイプ処理などでも二度読みは都合が悪そう)

今回紹介した方法以外にもawkのファイルの行数を取得する方法があると思いますので教えていただけると幸いです。

9
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1