复制一个CSV中的特定项目,并将其粘贴n次到另一个CSV中

2024-09-25 02:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力完成一些看似简单的事情,但这给了我一段非常艰难的时间

我有两个CSV:

file1.csv
HEADER1, HEADER2, HEADER3
item1,  item4,  item7
item2,  item5,  item8
item3,  item6,  item9 

file2.csv
HEADER1, HEADER2
item1,   item3
item1,   item3
item1,   item3
item1,   item3
item2,   item3
item2,   item3

我希望从file1.csv复制item7的次数与file2.csv中的item1存在的次数相同(可以是任意次数),对file1.csv中的item8和file2.csv中的item2执行相同的操作,并将结果连接到一个新文件中。生成的文件应如下所示:

file3.csv
HEADER1, HEADER2, HEADER3
item1,   item2,   item7
item1,   item2,   item7
item1,   item2,   item7
item1,   item2,   item7
item2,   item2,   item8
item2,   item2,   item8

如果有人能帮我解决这个问题,我将非常感激。我并不真正关心方法/工具,只要结果看起来像我的示例


Tags: 文件csv时间事情次数file1file2item1
2条回答

假设您的输出的第二列应该是item3,而不是item2,并且您的实际文件的排序与您的示例类似(对join的要求),并且您正在使用GNU版本的^{}来获得 header选项:

$ join -t,  header -j1 -o 0,2.2,1.3 file1.csv file2.csv
HEADER1, HEADER2, HEADER3
item1,   item3,  item7
item1,   item3,  item7
item1,   item3,  item7
item1,   item3,  item7
item2,   item3,  item8
item2,   item3,  item8

如果记录没有排序awk可以轻松处理

$ awk -F, -v OFS=, 'NR==FNR {a[$1]=$3; next} 
                            {print $0,a[$1]}' file1 file2

HEADER1, HEADER2, HEADER3
item1,   item3,  item7
item1,   item3,  item7
item1,   item3,  item7
item1,   item3,  item7
item2,   item3,  item8
item2,   item3,  item8

相关问题 更多 >