我对shell脚本的世界相对较新,所以希望这不会太难。我有一个文件(dirlist)与目录列表。我想
我想我在这里有所有的作品。第1-3项工作正常,但循环只是命名文件“echo”。
for i in `cat dirlist`; do samtools depth $i | awk '$1 == "chr17" {print $0}' echo $i | awk -F'[/]' '{print $8}'; done
非常感谢任何帮助
答案 0 :(得分:2)
本机bash实现(只有一个进程,而不是为每个文件启动awk
)如下:
while IFS= read -r filename; do
while IFS= read -r line; do
if [[ $line = "chr17"[[:space:]]* ]]; then
IFS=/ read -r -a pieces <<<"$filename"
printf '%s\n' "${pieces[7]}"
fi
done < <(samtools depth "$filename")
done <dirlist
答案 1 :(得分:1)
我认为这就是你想要做的事情
... | awk -v f="$i" 'BEGIN{split(f,fs,"/")} $1=="chr17" {print > fs[8]}'
最终文件名将从原始文件名生成,用“/”分隔,并仅使用第8段。有点不寻常,可能需要一些错误处理。
没有经过测试,请注意......