在我使用的第二个程序的参数中,我有一些文件要解析和使用输出:
for file in ./*.vcf.gz; do
echo "gunzip -c ${file} | awk 'BEGIN{FS=OFS=\"\t\"} NR == FNR{key[\$1]=\$2; next} \$1 in key{\$1=key[\$1]} 1' ./map | cut -f1-6 | sed '1,6d' | vep -i -o ./"${file}"_dnds --compress_output gzip --dir_cache ./"
done但是它是在awk命令下落下的
gunzip -c ${file} | awk 'BEGIN{FS=OFS=\"\t\"} NR == FNR{key[\$1]=\$2; next} \$1 in key{\$1=key[\$1]} 1' ./map input然后,对于进入vep程序的最后一段管道,我也不知道如何使输出进入-i输入,如下所示:
vep -i input -o ./"${file}"_dnds --compress_output gzip --dir_cache ./"这些是巨大的文本文件。在不读取临时文件的情况下,我如何做到这一点?
发布于 2019-07-12 06:55:09
来自EnsEMBL的变量效应预测器默认从标准输入(这里的文件)读取。
这意味着完全排除-i选项(以及它的选项-参数)将使它从管道中读取其输入。
我不知道在管道中您要做什么,但是看起来好像您试图用其他标识符替换一些标识符,从一个单独的文件中读取。在这样做的时候,您可以使用一个awk程序,其中包含无用的反斜杠。awk命令可以编写为
awk 'BEGIN { FS=OFS="\t" } NR == FNR { key[$1]=$2; next} ($1 in key) { $1=key[$1] } 1' map --输入文件名使awk在到达标准输入时(在处理名为map的文件后)读取它的标准输入。
awk是一种比管道赋予它更强大的语言,您可以很容易地将cut和sed代码集成到其中:
awk 'BEGIN { FS=OFS="\t" } NR == FNR { key[$1]=$2; next} ($1 in key) { $1=key[$1] } FNR > 6 { print $1, $2, $3, $4, $5, $6 }' map -你的剧本可能看起来像
#!/bin/sh
for file in ./*.vcf.gz; do
gzip -cd "$file" |
awk 'BEGIN { FS=OFS="\t" } NR == FNR { key[$1]=$2; next} ($1 in key) { $1=key[$1] } FNR > 6 { print $1, $2, $3, $4, $5, $6 }' map - |
vep -o "${file}_dnds" --compress_output gzip --dir_cache ./
done(还请注意变量展开的正确双引用)
如果要将.vcf.gz文件名后缀从输出文件的名称中移除,然后将_dnds追加到输出文件的末尾,请使用vep -o "${file%.vcf.gz}_dnds" ...。
发布于 2019-07-11 23:51:57
我刚发现问题的第一部分是通过让awk把stdin当作一个常规文件来解决的。
gunzip -c ${file} | awk 'BEGIN{FS=OFS=\"\t\"} NR == FNR{key[\$1]=\$2; next} \$1 in key{\$1=key[\$1]} 1' ./map -但还是想不出如何将解析的输出输送到
vep -i input -o ./"${file}"_dnds --compress_output gzip --dir_cache ./https://unix.stackexchange.com/questions/529703
复制相似问题