由于我正在努力学习更多内容,因此我更倾向于使用Python。但是,如果你能提供仍然有用的bash帮助。
我看了看Stack Overflow并发现了一些有用的东西,但还不足以让我完成这个。
我有两个带有一些共享字段的CSV文件。数据不是INT
。我希望基于匹配3个特定字段加入,并在完成所有处理后将其写入新的output.csv
。
sourceA.csv
看起来像这样:
fieldname_1,fieldname_2,fieldname_3,fieldname_4,fieldname_5,fieldname_6,fieldname_7,fieldname_8,fieldname_9,fieldname_10,fieldname_11,fieldname_12,fieldname_13,fieldname_14,fieldname_15,fieldname_16
sourceB.csv
看起来像这样:
fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16
如您所见,sourceB.csv
有4个字段名称也在sourceA.csv
中,而一个字段名称不在fieldname_OTHER
中。 sourceA[fieldname_6]
中的数据需要替换sourceA[fieldname_6]
中的数据。
整个过程应该是这样的:
如果满足以下所有条件,则将sourceB[fieldname_OTHER]
中的数据替换为data in sourceA[fieldname_4]=sourceB[fieldname_4]
data in sourceA[fieldname_8]=sourceB[fieldname_8]
data in sourceA[fieldname_16]=sourceB[fieldname_16]
中的数据:
sourceB[fieldname_5]
(sourceA[fieldname_6]
中的数据无需评估。)
如果不符合上述条件,只需将ANY
替换为文字output.csv
。
将每个已处理的行写入dataA,dataB,dataC,dataD,dataE,dataOTHER,dataG,dataH,dataI,dataJ,dataK,dataL,dataM,dataN,dataO,dataP
。
我希望输出基于输入CSV和上述处理的示例:
{{1}}
我希望我提供的细节并没有让它变得更加困惑。谢谢你的帮助!
答案 0 :(得分:1)
我不确定我是否会厌倦SQL这样的一次性合并。它在python中很简单。
使用csv
模块读入这两个文件,以获得两个列表。将sourceA索引到一个字典中,该字典的键是需要匹配的字段的元组。然后,您可以遍历sourceB,立即找到匹配的行,并从sourceB合并到其中。
完成后,您只需输出从sourceA读取的列表:dict和列表指向您现在已更新的相同值。