我发现以下命令有效。但有人可以解释一下它实际上做了什么吗?
awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $2}' file1 file2
它从文件中提取命令中传递的字段,并将其显示在终端中。
答案 0 :(得分:1)
awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $2}' file1 file2
由于NR
代表当前输入文件中的记录数和记录号的FNR
,因此在处理第一个文件时它们是相等的。因此,awk 'NR==FNR { things1; next } { things2 }' file1 file2
表示:
things1
。 things2
。 a[NR]=$2; next
表示:
a[]
中,索引为记录数(行数,通常,就像这种情况一样)。 print a[FNR], $2
表示:
这样,这将产生一个输出,包括两个文件的第二个字段,并排。
$ cat f1
1 2 3
4 5 6
7 8 9
10 11 12
$ cat f2
a1 a2 a3
a4 a5 a6
a7 a8 a9
a10 a11 a12
$ awk 'NR==FNR{a[NR]=$2; next} {print a[FNR], $2}' f1 f2
2 a2
5 a5
8 a8
11 a11
您可以在Idiomatic awk中找到更多信息。