【发布时间】:2019-02-18 11:05:00
【问题描述】:
在以下情况下。我想找到匹配的值: 文件 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 的内容。
-
嗨 karakfa,file1 只有大约 2000 行和 9 列
标签: awk