11

私は始まるgawkスクリプトを書いています

#!/bin/gawk -f
BEGIN { print FILENAME }

経由でファイルを呼び出しています./script file1.htmlが、スクリプトは何も返しません。何か案は?

4

4 に答える 4

14

BEGIN ブロックで本当に使用したい場合は、FILENAME の代わりに ARGV[1] を使用できます。

awk 'BEGIN{print ARGV[1]}' file
于 2011-03-26T13:52:42.003 に答える
10

1行目に遭遇したときにファイル名を出力できます:

FNR == 1

わかりにくく、理解しやすくしたい場合は、次のようにします。

FNR == 1 {print}

アップデート

私の最初の 2 つの解決策は間違っていました。指摘してくれたデニスに感謝します。彼のやり方は正しい:

FNR == 1 {print FILENAME}
于 2011-03-26T16:48:56.843 に答える
7

マニュアルページから直接(少し再フォーマット):

FILENAME:現在の入力ファイルの名前。コマンドラインでファイルが指定されていない場合、FILENAMEの値は「-」です。ただし、FILENAMEはBEGINブロック内で定義されていません(getlineで設定されていない場合)。

于 2011-03-26T11:44:45.820 に答える
1

Hai Vu の回答に基づいて、ファイル名をファイルごとに 1 回だけ印刷する場合は、条件付きでラップする必要があることをお勧めします。

if(FNR == 1) { print FILENAME };
于 2016-04-17T23:21:17.900 に答える