将文件列表的文本文件中的行传递给参数或作为参数传递

将文件列表的文本文件中的行传递给参数或作为参数传递

我有一个文件,每行有两个文件名,如下所示:

file1.fastq.gz file2.fastq.gz
...
file9fastq.ga file10fastq.gz

如何将这两个名称作为脚本的参数传递?

答案1

使用while read循环:

while read -r file1 file2 trash; do
  something with "$file1" and "$file2"
done < /path/to/input_file

这将逐行读取您的输入文件,分别设置file1第一file2列和第二列。 trash可能是不必要的,但我喜欢包含它来处理您可能遇到的事情,例如:

file1.fastq.gz file2.fastq.gz foo

如果您的文件包含类似上面的一行,并且您没有包含该trash变量(或类似的变量),则您的file2变量将设置为:file2.fastq.gz foo

答案2

xargs是另一种方式,如果您的文件格式与您所说的完全一样:每行两个空格分隔的字段(注意省略号...)。

< input xargs -n2 ./script-here

input...将逐行读取名为的文件并将两个参数传递给./script-here.

您可以重新安排重定向:

xargs -n2 ./script-here < input

...如果它对您有更好的直观意义。

相关内容