bash - 使用 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 的前缀
任何帮助将不胜感激。
解决方案
我看不出你使用的方式有什么错误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//\//-}
用破折号替换所有斜线。
推荐阅读
- r - 使用向量和定义的标量在 R 中生成金字塔
- terraform-provider-azure - terraform azurerm_scheduled_query_rules_log
- javascript - 我怎样才能把它写成一个类组件?
- angular - 使用 RxJs forkJoin 将多个 api 调用合并到单个输出数组中
- mysql - 如何在 MySQL 中处理具有相同结构的表中的 20M+ 记录
- c++ - unordered_map MSVC 失效保证
- javascript - 如何在 nodejs 中处理多个 web3 事务
- python - 如何在 Python 中获取 Parent 的变量
- laravel - Laravel Sail (docker), nginx 反向代理 - Html 呈现 localhost:8002 而不是 site.xyz
- java - 为什么使用 Intellij 调试 Quarkus 会失败?