从文本文件中读取并从 csv 文件中获取相应行

从文本文件中读取并从 csv 文件中获取相应行

我有一个名为的文本文件train_ids.txt和一个名为的 csv 文件dataset.csv

文本文件包含 ID通过这种方式:

dish_1.png
dish_5.png

输入 csv 文件有很多列和行,但是第一列包含 id。第一栏如下:

dish_1 
dish_2 
dish_3 
dish_4 
dish_5 

我想编写一个 bash 脚本来从文本文件中读取 id,并获取具有这些 id 的相应行,然后将整行放入新的 csv 文件中作为输出。

因此输出的 csv 文件应该是这样的:

dish_1  | whatever_1
dish_5  | whatever_5

笔记:

  • 在输出 csv 文件中,我的意思是任何整行
  • 我们必须删除.png从 ids 文本文件中进行搜索
  • 整个文本文件仅包含如上所述的 ID,没有不同的行
  • ids 文本文件已排序,但 csv 文件未排序
  • 文本文件中的 id 肯定在 csv 文件中,所以我们不需要跳过或报告任何内容。

我不知道该怎么做,你能帮帮我吗?

答案1

您不需要为此编写脚本,只需使用即可paste。您还没有向我们展示您的真实数据,所以我猜您有类似以下内容:

$ cat train_ids.txt 
dish_1.png
dish_2.png
dish_3.png
dish_4.png
dish_5.png

$ cat dataset.csv
dish_2, whatever2
dish_5, whatever5
dish_4, whatever4
dish_3, whatever3
dish_1, whatever1

如果是这样,您可以使用以下方式获取所需的输出:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv)
dish_1, whatever1
dish_2, whatever2
dish_3, whatever3
dish_4, whatever4
dish_5, whatever5

要将其作为竖线分隔文件而不是 csv(逗号分隔文件),您可以执行以下操作:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv) | sed 's/, / | /'
dish_1 | whatever1
dish_2 | whatever2
dish_3 | whatever3
dish_4 | whatever4
dish_5 | whatever5

相关内容