首页 > 解决方案 > 将文件作为输入并在其上运行 awk 命令

问题描述

我有一个 awk 命令,当我直接在终端上运行它时效果很好。但是,现在我想制作一个 bash 脚本,该脚本将文件名作为输入,然后在其上运行相同的 awk 命令并保存输出。我怎样才能实现?我的 awk 命令是:


awk -F, '/^#/ {next;} /^VariantID/ {printf("##fileformat=VCFv4.2\n");split($0,header);for(i=5;i<=NF;i++) printf("##INFO=<ID=%s,Number=1,Type=String,Description=\"%s\">\n",$i,$i);printf("#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n");next ;} {printf("%s\t%s\t%s\t%s\t%s\t.\t.\t",$2,$3,$1,$5,$6);for(i=5;i<=NF;i++) printf("%s=%s;",header[i],$i);printf("\n");}' > atlas.chr2.vcf

我想把它放在一个 bash 脚本中,该脚本将文件名作为输入,然后在其上运行 awk 命令,如下所示:

#!/bin/bash

##Take filename as input


###Run awk command on it and the output in a file:
awk -F, '/^#/ {next;} /^VariantID/ {printf("##fileformat=VCFv4.2\n");split($0,header);for(i=5;i<=NF;i++) printf("##INFO=<ID=%s,Number=1,Type=String,Description=\"%s\">\n",$i,$i);printf("#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n");next ;} {printf("%s\t%s\t%s\t%s\t%s\t.\t.\t",$2,$3,$1,$5,$6);for(i=5;i<=NF;i++) printf("%s=%s;",header[i],$i);printf("\n");}' > atlas.chr2.vcf

见解将不胜感激。

标签: bashawkvcf-variant-call-format

解决方案


推荐阅读