awk
入力が空のファイルのときにFILENAME変数が何も返さないのはなぜですか?awk
ファイルを開くことができないという意味ですか?開いていない場合は空であることをどうやって知ることができますか?または、開いているとファイル名を返さないのはなぜですか?
私は読んだこの投稿ただし、次の作業が必要な理由は説明しません。
awk 'BEGINFILE{print FILENAME}1' filename
以下はありません。
awk '{print FILENAME}' filename #or
awk 'BEGIN{print FILENAME}' filename
答え1
awk
マニュアルから:
FILENAME A pathname of the current input file.
Inside a BEGIN action the value is undefined. (...)
それが説明だと思います。フィールドが処理されるまで値はFILENAME
定義されません。空のファイルの場合、フィールドは処理されないため、変数は初期化されていません。
答え2
注:この回答の一部はawk
特にGNUに固有のものです。4.0後で追加BEGINFILE
/ENDFILE
一行にブロック
awk '{print "File name: " FILENAME}' myfile
これはFile name: myfile
myfile の各行ごとに 1 回印刷されます。 myfileが空のファイル(0バイト)の場合、行は含まれないため、上記の文字列はまったく印刷されません。
BEGINFILE
詰まった
awk 'BEGINFILE{print "File name: " FILENAME}' myfile
サポートされている場合は、File name: myfile
行が処理される前に一度印刷されます。
それ以外の場合、サポートされていない場合はBEGINFILE
偽の条件式で処理され、まったく出力されない可能性があります。
BEGIN
詰まった
awk 'BEGIN{print "File name: " FILENAME}' myfile
このブロックの評価はファイルが処理される前に発生し、この時点のFILENAME
値は次のとおりです。限定されない。
これgawk
文書具体的に定義して""
印刷することがわかりますFile name:
。