Bash在不同目录中的文件上循环并打印输出
我在目录Bash在不同目录中的文件上循环并打印输出,bash,shell,Bash,Shell,我在目录/mypath/mydir/中有*.vcf、*.vcf.vfidx和*.vcf.idx文件。我只想使用下面的命令(对于文件1)循环查看.vcf文件: 用于一个vcf文件的命令: vcf-subset -c sample.txt vcffile1.vcf | bgzip -c > output_vcfile1.vcf_.vcf.gz 有人能帮助循环所有的.vcf(不是vcf.vfidx或vcf.idx)文件,并使用上面显示的命令获取指定目录中每个文件的输出吗?/get/inthi
/mypath/mydir/
中有*.vcf
、*.vcf.vfidx
和*.vcf.idx
文件。我只想使用下面的命令(对于文件1)循环查看.vcf
文件:
用于一个vcf文件的命令:
vcf-subset -c sample.txt vcffile1.vcf | bgzip -c > output_vcfile1.vcf_.vcf.gz
有人能帮助循环所有的.vcf(不是
vcf.vfidx
或vcf.idx
)文件,并使用上面显示的命令获取指定目录中每个文件的输出吗?/get/inthis/dir/
for i in *.vcf; do echo "$i"; done
全局模式*.vcf
将只匹配以.vcf
结尾的文件
你的命令:
for i in *.vcf; do
vcf-subset -c sample.txt "$i" | bgzip -c > /get/inthis/dir/output_"$i"_.vcf.gz
done
如果必须在特定目录中搜索
.vcf
文件,例如/foo/bar/
,请执行以下操作:
for i in /foo/bar/*.vcf; do
vcf-subset -c sample.txt "$i" | bgzip -c > /get/inthis/dir/output_"${i##*/}"_.vcf.gz
done
谢谢,但您如何提及查找vcf文件的目录以及打印输出文件的目录?谢谢。所以
$i
表示这里的每个.vcf
文件?它不会在任何.vcf.vcfidx
文件上循环?我只是想澄清一下……谢谢。如果您在/foo/bar/*.vcf中为i指定了,那么如何在$i
之前指定.vcf
文件的目录路径;如果执行
,它将打印/get/inthis/dir/output_“$i”\uu.vcf.gz
中的$i
的完整路径,生成错误:没有这样的文件或目录
。搜索文件的最佳方法是什么,并且文件名只在$i
中,而不是在全文中path@MAPK是的,这称为参数扩展..检查man bash的参数扩展部分