gpt4 book ai didi

awk - 比较两个文件中的列并打印特定列中的匹配值

转载 作者:行者123 更新时间:2023-12-04 14:15:45 24 4
gpt4 key购买 nike

在下面的例子中。我想找到匹配的值:文件 1:第 8 和 9 列和文件 2:第 2 列和第 3 列

如果两个文件中的值完全相同,则像所需的输出文件一样打印

文件1

31429,36689,313212.5,2334362.5,31429,36679,31308,302412.50 2316512.50
31429,36701,313362.5,2334362.5,31429,36681,31311,2334363,31429
31429,36713,313512.5,2334362.5,31429,36719,31358,303312.50 2316512.50
31429,36749,313962.5,2334362.5,31429,36751,31398,2334362,31429
31429,36809,314712.5,2334362.5,31429,36803,31463,2334361,31429
31429,36821,314862.5,2334362.5,31429,36817,31481,2334363,31429

文件2

3000135825 302412.50 2316512.50
3000135837 302562.50 2316512.50
3000135849 302712.50 2316512.50
3000135861 302862.50 2316512.50
3000135873 303012.50 2316512.50
3000135885 303162.50 2316512.50
3000135897 303312.50 2316512.50
3000135909 303462.50 2316512.50
3000135921 303612.50 2316512.50
3000135933 303762.50 2316512.50
3000135945 303912.50 2316512.50

需要输出

3000135825 302412.50 2316512.50 3667931308 302412.50 2316512.50
3000135897 303312.50 2316512.50 3671931358 303312.50 2316512.50

我试过了使用这个命令我得到了结果,但是它需要很多时间,因为 file2 有 300 万行并且代码花费了太多时间为了能够使用代码,首先我创建了一个名为 tmp1 的临时文件,其中包含来自 file1 的第 5、6、8、9 列

awk -F, '{print($5$6,$8,$9)}' file1 > tmp1 

awk 'FNR==NR{a[$2$3]=$0;next}{print $0,a[$2$3]?a[$2$3]:"NA"}' file2 tmp1

最佳答案

如果 file1 的长度比 file2 小很多,你可以缓存 file1 的内容。

类似这样的(未测试)

$ awk -F, 'NR==FNR      {a[$8,$9]==$6$7; next}   # is $6$7 the key you want to print?
($2,$3) in a {print $1,$2,$3,a[$2,$3]}' file1 FS=' ' file2

因为值应该匹配,所以不需要再次打印它们。不确定是什么输出中打印的第四个值,但如果它来自 file1,只需替换为它。

关于awk - 比较两个文件中的列并打印特定列中的匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54737445/

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