awk 语法,奇怪的变量?

awk 语法,奇怪的变量?

我有这个awk命令:

awk -F, 'NR==FNR{_1[$1]++;next}_1[$1]' file1 file2

我其实几乎知道程序在做什么,但不知道_1意味着什么。目的是比较两个文件,一个有 1 个字段,另一个有 4 个字段。

这就是我正在尝试做的事情。我有这些文件,我需要知道文件1上的哪些数字在文件2中,然后打印文件2的记录。

文件1

89611862
89613696
84126597
88690669
60147342

文件2

84126597,12345300943529348333,2805058C30730000,28
88767631,12345712012010684248,2805058C30730002,28
83218719,12345712012012622594,2805058C30730006,28
89611862,12345712012010174449,2805058C30730014,28
85933710,12345712012007778032,2805058C3073001A,26
88690669,12345712012012060159,2805058C3073001E,28
60147342,12345712012011235922,2805058C30730030,28
89613696,12345712012008043980,2805058C3073003C,28
84783612,12345712012031117926,2805058C3073004C,28
awk -F, 'NR==FNR{arr[$1]++;next}arr[$1]' file1 file2

但它只打印最后找到的记录:

60147342,12345712012011235922,2805058C30730030,28 

谢谢!

答案1

awk不允许仅包含数字的变量名称(变量名称也不能以数字开头),因此在 1 前面_1添加一个技巧; _so,_1是程序中的变量名awk,在本例中恰好是一个数组。

这是一个例子:

% awk 'BEGIN {1 = 3}'
awk: cmd. line:1: BEGIN {1 = 3}
awk: cmd. line:1:          ^ syntax error

% awk 'BEGIN {_1 = 3}'  # runs fine

顺便说一句,除非您是故意打高尔夫球,否则您应该在程序中使用可读的变量名称,以获得更好的可维护性。

相关内容