我已经说了100个文本文件,其中50个文件名以sshv2l开头,另外50个没有sshv2l。我想将它们合并成这样的循环(如下),其中我有两组合并文件。对于使用sshv2l的文件,我做了如下的操作,但是没有sshv2l就不能合并文件。如果没有条件,如何在bash中的for循环中编写?

for f in sshv2l*; do
echo "Merging file :" $f
cat ${f} >> sshv2l_merged.fastq
done

最佳答案

您的循环代码可以替换为singlecat

cat sshv2l* >> /path/to/sshv2l_merged.fastq

现在要获取所有不是以sshv2l开头的文件,可以使用extglob否定glob:
# enable extglob
shopt -s extglob nullglob

cat !(sshv2l*) >> /path/to/not_sshv2l_merged.fastq

# disable extglob
shopt -u extglob nullglob

我添加了一些虚构的/path/to/路径,以确保将*.fastq文件保存在当前目录之外,避免它们在cat命令中连接起来。

07-24 13:04