我有一个 csv 文件,该文件通过 SFTP 传输到我设置的 RHEL 框中。然后,该文件被稍微转换,然后另一个 SFTP 进程进入并抓取它,然后将其发送出去导入第三方数据库。
我需要有一个 shell 脚本打开文件一,获取 id 和 code 字段..在文件二中搜索它们..从文件二中抓取 pay 字段并插入到文件一的 pay 字段中。
例子:
File1.csv
501,101,
505,101,
507,103,
File2.csv
501,101,5.50
505,101,6.25
507,103,1.25
我想将File2中的5.50插入到File1中101后面的字段中。显然是逐行搜索File1并重复。
经过一些搜索,我遇到了似乎可以工作的 join 命令,但我有 2 个需要连接的公共字段,而且我查看了文档,似乎只支持 1 个公共字段。
就像是:
join -t, -0 1.1 1.2 2.3 -1 1 -2 1
这解决了第一次查找的问题..但我需要匹配第 1 列和第 2 列才能得到我想要的结果。
更新
因此,在进行更多挖掘时,我一直在使用 Join 和 Awk 来完成这项工作。感觉我已经很接近了,但还是缺少了一些东西,因为我现在的输出是空白的。
我的实际数据文件布局与上面的基本示例不同。以下是更好的表示:
File1.csv
Column1,Column2,Column3,Column4,Column5,Column6,Column7
File2.csv
Column1,Column2,Column3,Column4,Column5
如果文件 1 中的列 1、4、7 与文件 2 中的列 2、5、3 匹配,我想将文件 1 中的列 6 的值设置为文件 2 中的列 4 的值
我迄今为止的尝试是:
join -t, -j1 -0 1.1 1.2 1.3 1.4 1.5 2.6 1.7 <(<file1.csv awk -F ","
'{print $1"-"$4"-"$7","$0}' | sort -k1,1) <(<file2.csv awk -F "," '{print ($2"-"$5"-"$3","$0}' | sort -k1,1) > out.csv
我仍然想包含没有匹配的条目。如果我包括
-a1
它确实实现了这一点,但我匹配的字段是空白的。相反,我希望它只保留原始数据。