使用 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//\//-}
将所有斜线替换为破折号。
我正在尝试在 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//\//-}
将所有斜线替换为破折号。