awk 与空白文件不匹配

awk unmatched with blank file

最近我遇到了 awk

的奇怪行为问题

假设我有两个文件,一个是空白文件,另一个是填充数据

所以让我应用一个简单的无与伦比的代码

awk -v var=0  'NR==FNR{a[$var]++;next} !($var in a)' file1 file2

file1

&

file 2
a
b
v

它将 return 空白数据,因为它应该 return 文件 2 中的所有内容。 有人可以向我解释如何解决这个问题吗?

file1 中没有任何数据,因此总记录数永远不会改变,因此 FNR == NR 贯穿 file2。我也不确定是否有简单的方法来解决这个问题。

您甚至不能使用BEGIN 块来记录当前文件名和文件名更改时的位置。 awk 的 POSIX 规范说:

FILENAME A pathname of the current input file. Inside a BEGIN action the value is undefined. Inside an END action the value shall be the name of the last input file processed.

我认为您最好的选择可能是将 FILENAMEARGV[1] 进行比较:

awk -v var=0 'FILENAME==ARGV[1] {a[$var]++;next} !($var in a)' file1 file2