【问题标题】:Copy specific items in one CSV and paste them n amount of times into another CSV复制一个 CSV 中的特定项目并将它们粘贴 n 次到另一个 CSV
【发布时间】:2020-11-21 19:06:06
【问题描述】:

我正在尝试完成一些看似简单的事情,但它让我很艰难。

我有两个 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

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

【问题讨论】:

  • 您可以使用csv 模块来做到这一点。
  • 输出中的第二列真的应该是 item2 吗?还是您的意思是第 3 项?
  • 是的,对不起。应该是item3。

标签: python linux bash for-loop awk


【解决方案1】:

假设您的输出的第二列应该是item3,而不是item2,并且您的实际文件按照您的示例进行排序(join 的要求),并且您使用的是 GNU 版本join(1)获取--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

【讨论】:

  • -j1 不需要明确指定,因为它是默认值。
【解决方案2】:

如果记录没有排序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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2022-07-06
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多