ワイルドカードを使用してawkから複数のデータファイルを読み取る

ワイルドカードを使用してawkから複数のデータファイルを読み取る

file1.dat、file2.datなどという名前の複数のデータファイルがあり、それぞれ2つの列と3つの行が含まれています。

コマンドを使用して複数のファイルを読み込みました。

awk '{print $2}' file*.dat

2番目の列のすべてのファイルが出力としてクールに一覧表示されます。しかし、各ファイルの2行目だけを読み取ろうとすると、最初のファイルfile1.datだけが読み取られます。

awk '{if(NR==2) print $2}' file*.dat

打者を打っても

awk '{if(NR==2) print $2}' file1.dat file2.dat file3.dat

つまり、ワイルドカードを省略した場合

明らかに私の構文は非常に間違っています。それが重要であれば、私はMacOS Mojaveでgawkではなくawkを使用しています。何が間違っているのか知りたいです。

答え1

ここではキーの FNR代わりに使用してください。指定されたすべての入力の合計レコード数。現在処理中の入力ファイルのレコード番号。NRNRFNR

だから:

awk 'FNR == 2 {print $2}' ./file*.dat

また、省略するのcondition {action}ではなく、より慣用的なパターンに注意してください。awk状況if()そして行動部分。

また、ファイル名に文字が含まれる可能性がある問題を避けるため./に、globを使用するときによく使用されるプレフィックスをメモしてください。awk=

また、glob は語彙順にソートされ、./file1.dat./file10.dat./file11.dat./file2.data..../file3.dataはその順にソートされます。zshシェルを介して、、、、...順序を使用して./file*.dat(n)取得できます。./file1.dat./file2.data./file3.data./file10.dat./file11.dat

関連情報