【发布时间】:2016-06-18 17:54:59
【问题描述】:
我一直在寻找这个解决方案的 ole interweb,但没有发现任何成功的东西。我有一个来自一个脚本的 CSV 输出,该脚本具有以特定方式呈现的数据,我需要匹配它并与另一个文件合并。如果我可以四舍五入到一个简单的 2 x 小数点,则额外奖励。
文件 1:dataset1.csv(使用第 1 列作为主键或我想在其他文件中搜索的内容。)
5033db62b38f86605f0baeccae5e6cbc,20.875,20.625,41.5
5033d9951846c1841437b437f5a97f0a,3.3529411764705882,12.4117647058823529,13.7647058823529412
50335ab3ab5411f88b77900736338bc6,6.625,1.0625,3
5033db62b38f86605f0baeccae5e6cbc,2.9375,1,1.4375
文件 2:dataset2.csv(如果第 2 列匹配文件第 1 列的第 1 列,则从文件 2 替换文件 1 第 1 列中的数据。)
"dc2","5033db62b38f86605f0baeccae5e6cbc"
"dc1","5033d9951846c1841437b437f5a97f0a"
期望的结果:
文件 1(或新文件 3):
dc1,3.35,12.41,13.76
dc2,20.875,20.625,41.5
只是为了证明我一直在努力寻找方法,而不是随便问一个问题,希望别人能解决我的问题。
我发现了许多说要使用联接的资源。
join -o 1.1,1.2,1.3,1.4,2.3 file 1 file 2 等。我已经测试了很多不同的方法。我在许多帖子上读到需要对结果进行排序 - 这么长的字符串有点难。更不用说文件 1 可能有 30 到 40 个条目,但文件 2 可能只有 10 个。我只需要一个与长字符串关联的名称。
我开始研究 grep - 但是我需要一个 forEach 循环来循环遍历所有结果,并且必须有一个更简单的方法。
我还研究了 AWK - 现在这是一个有趣的尝试,试图弄清楚如何使这项工作发挥作用。
awk 'FNR==NR {a[$2]; next} $2 in a' file.csv testfile2.csv
是的....尝试了很多方法来比较这个,因为这似乎是一般的想法......但仍然没有让它起作用。我希望这是某种类型的 linux shell 脚本,非常简单,我可以从 php 页面调用并运行它。就像用户点击刷新一样,它会搅动它并消化数据。
任何帮助将不胜感激!
谢谢。
j。
【问题讨论】:
-
您不介意答案基于哪种语言? (PHP、python、awk)?
-
我正在探索所有选项 - 它必须简单且易于重复......我仍在测试以下一些建议。