我的目录中包含许多压缩数据以及一些文件名。我有两种文件类型als.sumstats.lmm.chr和als.sumstats.meta.chr。 chr之后是1-22。我只想遍历als.sumstats.meta.chr。但是,我的代码无法正常工作。我一直得到gzip:/ALSsummaryGWAS/Summary_Statistics_GWAS_2016/als.sumstats.meta.chr*.txt.gz:没有这样的文件或目录,这表明我的循环找不到我的文件。有人可以帮忙吗?这就是我现在所拥有的。
#!/bin/bash
FILES=/ALSsummaryGWAS/Summary_Statistics_GWAS_2016/als.sumstats.meta.chr*.txt.gz
for f in $FILES;
do
echo "$FILES"
echo "extracting columns 2,1,3,9"
gunzip -c $f | awk '{print $2, $1, $3, $14+$15}' >> ALSGWAS.txt
done
答案 0 :(得分:1)
在脚本段中,通配符'*'模式作为字符串存储在$FILES
变量中,需要在某个时候对其进行评估以获取匹配文件的列表。
为了对其进行评估,您可以像这样使用eval
:
FILES="ls -1 /ALSsummaryGWAS/Summary_Statistics_GWAS_2016/als.sumstats.meta.chr*.txt.gz"
for f in $(eval $FILES);
do
echo "$FILES"
echo "processing $f"
echo "extracting columns 2,1,3,9"
gunzip -c $f | awk '{print $2, $1, $3, $14+$15}' >> ALSGWAS.txt
done
但是建议不要使用eval
来进行此类操作(eval is dangerous),因此您可以这样尝试:
FILES=$(ls -1 /ALSsummaryGWAS/Summary_Statistics_GWAS_2016/als.sumstats.meta.chr*.txt.gz)
for f in $FILES;
do
echo "$FILES"
echo "processing $f"
echo "extracting columns 2,1,3,9"
gunzip -c $f | awk '{print $2, $1, $3, $14+$15}' >> ALSGWAS.txt
done