gpt4 book ai didi

linux - 如何根据一个匹配列合并具有不同字段的两个文件?

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:18 24 4
gpt4 key购买 nike

我有如下两个文件,我想根据公共(public) ID 将它们合并为一个文件:

文件1:

ARS     8.0   8.0
BBL 1.1 1.2
CCL 1.9 1.8

文件2:

ARS     2.3   2.4
ARS 2.6 2.4
ARS 2.5 2.3
BBL 1.9 1.8
EDE 1.4 1.6

期望的输出:

ARS     8.0   8.0    ARS     2.3   2.4
ARS 8.0 8.0 ARS 2.6 2.4
ARS 8.0 8.0 ARS 2.5 2.3
BBL 1.1 1.2 BBL 1.9 1.8
CCL 1.9 1.8 NA
NA EDE 1.4 1.6

最佳答案

$ cat tst.awk
BEGIN { FS=OFS="\t" }
FNR==1 {
na = $0
gsub("[^"FS"]","",na)
nas[++numFiles] = "NA" na
}
NR==FNR { file1[$1] = $0; next }
$1 in file1 { print file1[$1], $0 }
{ file2[$1] = $0 }
END {
for (key in file1) {
if ( !(key in file2) ) {
print file1[key], nas[2]
}
}
for (key in file2) {
if ( !(key in file1) ) {
print nas[1], file2[key]
}
}
}

.

$ awk -f tst.awk file1 file2
ARS 8.0 8.0 ARS 2.3 2.4
ARS 8.0 8.0 ARS 2.6 2.4
ARS 8.0 8.0 ARS 2.5 2.3
BBL 1.1 1.2 BBL 1.9 1.8
CCL 1.9 1.8 NA
NA EDE 1.4 1.6

可以通过多种方式对其进行优化,以不将两个文件的全部内容存储在数组中,但我喜欢上述方法的简单性和对称性,如果由于大量输入文件而证明有必要,则稍后进行优化是微不足道的。

关于linux - 如何根据一个匹配列合并具有不同字段的两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com