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
代わりに使用してください。指定されたすべての入力の合計レコード数。現在処理中の入力ファイルのレコード番号。NR
NR
FNR
だから:
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