首页 > 解决方案 > 使用 for 循环读取时匹配文件

问题描述

我正在尝试在 while 读取命令中组合一个 for 循环。如果单独运行,此 for 循环将根据需要工作:

for file in *postp*/*; 
do;
ls $file/*/*/sequences/*/*_supercontig.fasta | xargs cat > My_New_File.txt; 
done;

但是,我只想对基于给定输入列表 (Files_to_cat.txt) 命名的文件 (*.fasta) 进行分类。这是我正在尝试的代码,但返回一个空文件,所以我有问题。

while read -r name;
do;
    for file in *postp*/*; 
    do;
    ls $file/*/*/sequences/*/"$name"_supercontig.fasta | xargs cat > My_New_File.txt; 
    done;    
done<Files_to_cat.txt 

注意 Files_to_cat.txt 中的列表匹配 *_supercontig.fasta 的前缀

任何帮助将不胜感激。

标签: bashloopsfor-loopwhile-loopxargs

解决方案


我看不出你使用的方式有什么错误while read

您可能会得到这个结果,因为您使用了覆盖重定向> My_New_File.txt。如果最后一个被cat-ed的文件My_New_File.txt是空的,那么My_New_File.txt也将是空的。

我希望您想要做的是:

  • 附加到文件:>> My_New_File.txt;
  • 每个输出都有不同的文件名:> "Copy_of_${file##*/}_$name"
    • ${file##*/}匹配*/字符串的开头并将其删除,因此我们得到文件的基本名称。我们也可以${file//\//-}用破折号替换所有斜线。

推荐阅读