我在一个标准格式的目录中有一些文件,我希望使用一个带有部分文件名的txt文件来通过*扩展它们,然后最后添加一个。gz标签作为输出
例如,一个名为1.SNV.111-T的文件。在我的目录vcf,我有111-T在我的txt文件。
#!/bin/bash
while getopts f: flag
do
case "${flag}" in
f) file=${OPTARG};;
esac
done
while IFS="" read -r p || [ -n "$p" ]
do
vcf="*${p}.vcf"
bgzip -c ${vcf} > ${vcf}.gz
done < $file
这将成功运行bgzip,但实际上保存输出为:
"* 111 - t.vcf.gz">
所以在末尾添加。gz会有"deactivated"*字符,正如Barmar指出的,这是因为在我的目录中没有一个名为1.SNV.111-T.vcf.gz的文件,所以通配符是不激活的,请有人帮助吗?
我是bash脚本的新手,但我认为必须有一些方法来保存"绝对";我的VCF变量的值,以便一旦它第一次找到匹配,它现在是一个可以在下游使用的字符串?我在网上找不到任何东西。
问题是通配符只有在匹配现有文件时才会展开。你不能在文件名中使用通配符。
您需要将扩展后的文件名放入vcf
变量中。你可以这样做:
vcf=$(echo *"$p.vcf")
bgzip -c "$vcf" > "$vcf.gz"