我有这个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
顺便说一句,除非您是故意打高尔夫球,否则您应该在程序中使用可读的变量名称,以获得更好的可维护性。