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.
我认为您最好的选择可能是将 FILENAME
与 ARGV[1]
进行比较:
awk -v var=0 'FILENAME==ARGV[1] {a[$var]++;next} !($var in a)' file1 file2
最近我遇到了 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.
我认为您最好的选择可能是将 FILENAME
与 ARGV[1]
进行比较:
awk -v var=0 'FILENAME==ARGV[1] {a[$var]++;next} !($var in a)' file1 file2