首页 > 解决方案 > 循环通过制表符分隔的文件

问题描述

我有一个要求,我必须在其中有一个“制表符分隔文件”,它有三列。我在这里复制了六行示例

file_id        file_name   sample_id
30a6e42d      2f601196     TARGET-20-PABLDZ-04A
25fe4062      3ea58509     TARGET-20-PABLDZ-04A
839d38ec      5c971b6e     TARGET-20-PABLDZ-04A
79f40af8      4a2ace7c     TARGET-20-PADYIR-09A
afb79159      fea2f740     TARGET-20-PADYIR-09A
177500c8      1eae7be6     TARGET-20-PADYIR-09A

每个 sample_id 对应 3 个 file_id

我的要求是遍历所有 sample_id,并找到所有三个 file_id

对于每个 sample_id

cd <file_id>(文件夹名称与 file_id 相同)。该<file_id>文件夹与选项卡单独文件所在的位置相同。获取文件名(该文件存在于<file_id>文件夹中)

cp 文件名到一个目录

谢谢你的帮助

标签: bashshellunix

解决方案


你可以试试

while IFS=$'\t' read -r column1 column2 column3 ; do
  printf "%b\n" "column1<${column1}>"
  printf "%b\n" "column2<${column2}>"
  printf "%b\n" "column3<${column3}>"
done < "myfile"

IFS=$'\t' 是告诉 bash 制表符是分隔符


推荐阅读