所以我试图理解这个answer合并使用awk
的两个文件,我想出我的解决方案来满足我的需求。在使用awk处理另一个文件时在一个文件中打印一列
awk 'FNR==NR{a[$1]=$2 FS $3;next} {a[$1]=$2 FS $3}{ print a[$1]}' file2 file1
我的文件如下: -
file1
和file2
内容如下: -
1 xyz pqr F -
1 abc def A -
1 abc mno G -
1 abc def A
1 xyz pqr T
我期待下面的输出: -
1 xyz pqr F - T
1 abc def A - A
基本上要匹配上的第1,2,3列file1
并打印在结果上追加file2
上最后一列的内容。
所以我的解决方案我做了如下的理解,
FNR==NR{a[$1]=$2 FS $3;next}
将在file2
存储阵列a
作为COLUMN2空间栏3至的file2
末的条目处理。- 现在就
file1
,我可以做{a[$1]=$2 FS $3}
匹配来自file2
那些行,这将给我所有的行中file1
其列$1
的价值a[$1]
是相同COLUMN2价值$2
空间栏3价值$3
。现在问题来了。 - 在file1中匹配它们之后,我不知道如何按预期打印值。我试着打印
$0
和a[$1]
和他们给我分别1 xyz pqr F - 1 abc def A - xyz pqr abc def
输出为顺序。我最担心的是因为在FNR==NR
通过期间我没有捕获到file2
的最后一列,我可能没有存储在我的数组中的值?或者我有它存储?
岂不是最好的说'AWK“FNR == NR {A [$ 1 FS $ 2个FS $ 3] = $ 4;下一个}(($ 1 FS $ 2 FS $ 3)a){print $ 0,a [$ 1 FS $ 2 FS $ 3]}'f2 f1'? – fedorqui
@fedorqui:错过了[a] = $ 4'的逻辑,这对我有帮助!请将其作为答案提供,以便参考! – Inian