在使用for循环读取时匹配文件

时间:2018-11-11 23:01:35

标签: bash loops for-loop while-loop xargs

我试图在一个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的前缀匹配

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我无法发现您使用while read时遇到的任何错误。

您可能会得到此结果,因为您使用了覆盖重定向> My_New_File.txt。如果catMy_New_File.txt的最后一个文件为空,则My_New_File.txt也将为空。

我希望您要做的是:

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