bash - 将文件作为输入并在其上运行 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
见解将不胜感激。
解决方案
推荐阅读
- string - 如何在 Microsoft Power Automate 中的流操作中将空字符串插入到字段中
- version-control - 原始函数序列的 Dyalog SALT.Load 异常“无法修复”
- asp.net-mvc - MemoryCache.Count 贵吗?
- google-chrome - 自动除以获得价值的项目数量
- ios - ScreenshotDataForQuality:rect:error:] Appium 与 IOS 14.5
- nextflow - 输出文件(染色体块)在 nextflow 中合并
- android - Android kotlin:如何将图像变成 MultipartBody?
- python - Docker 中的 Python ARM - 安装要求需要很长时间
- c# - 为什么玩家射击时子弹有时不会出现在游戏视图中?
- python - 如何从 matplotlib 返回图例数据