Bash循环,如果没有条件

时间:2018-10-03 15:25:43

标签: linux bash shell

我说有100个文本文件,其中有50个文件名以sshv2l开头,其他50个没有sshv2l。我想将它们合并成这样的循环(如下),其中有两组合并的文件。对于使用sshv2l的用户,我做了以下类似操作,但没有sshv2l便无法合并文件。如何在bash中的for循环中编写条件条件?

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

1 个答案:

答案 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命令中被串联。