gpt4 book ai didi

linux - 如何比较 unix 中的两个文件并合并包含匹配和不匹配数据的文件 1 和 2

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

请告诉我如何比较 2 个文件并合并匹配和不匹配的行。我已经检查了之前提供的所有答案,但没有一个符合我的要求。请在下面找到示例数据集

file1.csv 的内容:

J2D     TEXAS        43988
J2D AUSTIN 21305
J2D CUPERTINO 378563
J2D BELGIUM 569632
J2D UK 0
J2D US 8
J2D INDIA 75321

file2.csv 的内容:

J2D     TEXAS        25463
J2D AUSTIN 5986
J2D CUPERTINO 0234
J2D BELGIUM 123468
J2D UK 5874
J2D US 2365
J2D IRAQ 8982

我尝试了以下命令,但它在我的场景中不起作用:

awk 'NR==FNR{a[$2]=$3;next;}{print $0 "    " ($2 in a ? a[$2] : "NA")}' file2.csv file1.csv

输出:

J2D     TEXAS        43988    25463
J2D AUSTIN 21305    5986
J2D CUPERTINO 378563    0234
J2D BELGIUM 569632    123468
J2D UK 0     5874
J2D US 8     2365
J2D INDIA 75321    NA

在上面的结果中,您可以看到 file2.csv 中的“IRAQ”丢失了。

awk 'NR==FNR{a[$2]=$3;next;}{print $0 "    " ($2 in a ? a[$2] : "NA")}' file1.csv file2.csv

输出:

J2D     TEXAS        25463    43988
J2D AUSTIN 5986    21305
J2D CUPERTINO 0234    378563
J2D BELGIUM 123468    569632
J2D UK 5874    0
J2D US 2365    8
J2D IRAQ 8982    NA

在上面的结果中,您可以看到 file1.csv 中的“INDIA”丢失了

下面是预期的输出。请帮助我获得所需的输出

预期输出:

J2D     TEXAS      43988      25463
J2D AUSTIN 21305 5986
J2D CUPERTINO 378563 0234
J2D BELGIUM 569632 123468
J2D UK 0 5874
J2D US 8 2365
J2D INDIA 75321 NA
J2D IRAQ NA 8982

最佳答案

粘贴 + awk解决方案:

paste file1.csv file2.csv | awk '{ if($2==$5) { print $1,$2,$3,$6 }
else { print $1,$2,$3,"NA","\n",$4,$5,"NA",$6 }}' | column -tx

输出:

J2D  TEXAS      43988   25463
J2D AUSTIN 21305 5986
J2D CUPERTINO 378563 0234
J2D BELGIUM 569632 123468
J2D UK 0 5874
J2D US 8 2365
J2D INDIA 75321 NA
J2D IRAQ NA 8982

详细信息:

  • paste file1.csv file2.csv - 合并文件行

  • if($2==$5) { print $1,$2,$3,$6 } - 如果文件与第二列匹配($5 字段指向file2.csv早期第二列)

  • print $1,$2,$3,"NA","\n",$4,$5,"NA",$6 - 将未处理的行打印为带有 NA 的单独行 在相对位置

http://man7.org/linux/man-pages/man1/paste.1.html

关于linux - 如何比较 unix 中的两个文件并合并包含匹配和不匹配数据的文件 1 和 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44161917/

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