我有一个名为的文本文件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