私は始まるgawkスクリプトを書いています
#!/bin/gawk -f
BEGIN { print FILENAME }
経由でファイルを呼び出しています./script file1.html
が、スクリプトは何も返しません。何か案は?
BEGIN ブロックで本当に使用したい場合は、FILENAME の代わりに ARGV[1] を使用できます。
awk 'BEGIN{print ARGV[1]}' file
1行目に遭遇したときにファイル名を出力できます:
FNR == 1
わかりにくく、理解しやすくしたい場合は、次のようにします。
FNR == 1 {print}
私の最初の 2 つの解決策は間違っていました。指摘してくれたデニスに感謝します。彼のやり方は正しい:
FNR == 1 {print FILENAME}
マニュアルページから直接(少し再フォーマット):
FILENAME:現在の入力ファイルの名前。コマンドラインでファイルが指定されていない場合、FILENAMEの値は「-」です。ただし、FILENAMEはBEGINブロック内で定義されていません(getlineで設定されていない場合)。
Hai Vu の回答に基づいて、ファイル名をファイルごとに 1 回だけ印刷する場合は、条件付きでラップする必要があることをお勧めします。
if(FNR == 1) { print FILENAME };