【问题标题】:Find match values from other CSV file then append back matching values as new columns in a csv file从其他 CSV 文件中查找匹配值,然后将匹配值作为新列附加到 csv 文件中
【发布时间】:2015-08-20 08:58:42
【问题描述】:

我有 2 个 CSV 文件,其中包含超过 500 行

1 包含产品信息

ID, names, url, color, size
p01, abc, uploads/abc.jpg, red, M
P02, abz, uploads/abz.jpg, yellow, S
p03, xyz, uploads/xyz.jpg, green, L
p04, qwe, uploads/qwe.jpg, blue, XL

另一个包含与该产品相关的图像位置,一个产品有很多图片。

ID, product_id, url
01, p01, uploads/item/asa.jpg
02, p01, uploads/item/aza.jpg
03, p01, uploads/item/dna.jpg
04, p01, uploads/item/adn.jpg
05, p02, uploads/item/bka.jpg
06, p02, uploads/item/bda.jpg
07, p04, uploads/item/cde.jpg

这样的结果

ID, names, url, color, size, thumb1, thumb2, thumb3, thumb4, ....
p01, abc, uploads/abc.jpg, red, M, uploads/item/asa.jpg, uploads/item/aza.jpg, uploads/item/dna.jpg, uploads/item/adn.jpg
P02, abz, uploads/abz.jpg, yellow, S, uploads/item/bka.jpg, uploads/item/bda.jpg
p03, xyz, uploads/xyz.jpg, green, L, 
p04, qwe, uploads/qwe.jpg, blue, XL, uploads/item/cde.jpg

那么我可以在终端中执行哪些实用程序?

【问题讨论】:

  • 第二个文件中的大写 P 是什么意思?
  • 嗨,这是产品ID

标签: bash shell csv


【解决方案1】:

你可以使用awk:

awk 'BEGIN{FS=OFS=", "}
     NR==1{print "ID, names, url, color, size, thumbnails"; next}
     FNR==NR{$2=tolower($2); a[$2] = (a[$2]?a[$2] ", " $3:$3); next}
     FNR>1{print $0, a[tolower($1)]}' file2 file1

输出:

ID, names, url, color, size, thumbnails
p01, abc, uploads/abc.jpg, red, M, uploads/item/asa.jpg, uploads/item/aza.jpg, uploads/item/dna.jpg, uploads/item/adn.jpg
P02, abz, uploads/abz.jpg, yellow, S, uploads/item/bka.jpg, uploads/item/bda.jpg
p03, xyz, uploads/xyz.jpg, green, L,
p04, qwe, uploads/qwe.jpg, blue, XL, uploads/item/cde.jpg

【讨论】:

  • 是的,在我将 OFS=", " 更改为此 OFS="," (删除空格)后,它可以完美运行。谢谢你 anubhava,你的 awk 很棒!
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多