我说有100个文本文件,其中有50个文件名以sshv2l开头,其他50个没有sshv2l。我想将它们合并成这样的循环(如下),其中有两组合并的文件。对于使用sshv2l的用户,我做了以下类似操作,但没有sshv2l便无法合并文件。如何在bash中的for循环中编写条件条件?
for f in sshv2l*; do
echo "Merging file :" $f
cat ${f} >> sshv2l_merged.fastq
done
答案 0 :(得分:4)
您的循环代码只能用单个cat
代替:
cat sshv2l* >> /path/to/sshv2l_merged.fastq
现在要抓取所有不是以sshv2l
开头的文件,您可以使用extglob
否定句:
# enable extglob
shopt -s extglob nullglob
cat !(sshv2l*) >> /path/to/not_sshv2l_merged.fastq
# disable extglob
shopt -u extglob nullglob
我添加了一些虚构的/path/to/
路径,以确保将*.fastq
个文件保留在当前目录之外,以避免它们在cat
命令中被串联。