使用 for 循环读取 while 中的匹配文件

matching files in while read with for loop

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

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

但是,我只想对根据给定输入列表 (Files_to_cat.txt) 命名的文件 (*.fasta) 进行分类。这是我正在尝试的代码,但是 returns 是一个空文件,所以我出错了。

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

的前缀

如有任何帮助,我们将不胜感激。

我无法发现您使用 while read 的方式有任何错误。

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

我想你想要做的是:

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