因此,我试图理解使用合并两个文件的答案,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
基本上是从file2
上开始匹配第1,2,3file1
列,file2
然后在结果上打印最后一列的内容。
因此,我对解决方案的理解如下:
FNR==NR{a[$1]=$2 FS $3;next}
将处理file2
将数组的条目存储a
为column2的空间column3直到的结尾file2
。file1
,我可以从符合这些行file2
做{a[$1]=$2 FS $3}
,这将给我都在这些行file1
其列$1
的值a[$1]
是一样的COLUMN2价值$2
空间栏3的值$3
。现在问题来了。$0
,a[$1]
他们给了我按顺序输出
1 xyz pqr F -
1 abc def A -
xyz pqr
abc def
分别。我最大的担心是,因为我file2
在FNR==NR
传递过程中没有捕获到最后一列,所以我可能没有将值存储在数组中?还是我将其存储?
使用这个awk
:
awk 'NR==FNR{a[$2 FS $3]=$4; next} $2 FS $3 in a{print $0, a[$2 FS $3]}' file2 file1
您的中存在一些问题awk
。
$4
从file2
。但是,您尚未存储它。file1
,您正在为分配一个a
值为的数组file1
。(这一点:a[$1]=$2 FS $3
)正如@EdMorton所建议的,一种更易读的形式:
awk '{k=$2 FS $3} NR==FNR{a[k]=$4; next} k in a{print $0, a[k]}' file2 file1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句