【问题标题】:AWK gaps between cells [closed]单元格之间的 AWK 间隙[关闭]
【发布时间】:2013-10-21 11:41:26
【问题描述】:

我有一个问题,请你帮帮我? 我有 .txt 文件,我使用 awk 代码使用制表符分隔功能分隔列。 我收到对齐列,但如果缺少某些信息,则整行向左转,信息将转移到另一列。请问你能帮帮我吗?我怎么能 并入此代码?非常感谢。。

#!/bin/bash

for f 
in *.vcf; 
do awk 'BEGIN {OFS = "\t"}
        /^##/ {next}
        /^#/ {sub(/^#/,"",$1)}
        {$1=$1; print}
    ' "$f" > "${f/%vcf/tsv}"
done


> INPUT:
> 
> CHROM    ID    REF   ALT 
  chr1    235     A     B 
  chr2     A      B
  chr3    225     B

输出:

  CHROM    ID   REF   ALT  
  chr1    235    A     B 
  chr2     .     A     B 
  chr3    225    .     B

【问题讨论】:

  • 列如何对齐?您可以发布示例数据吗?
  • 您可以检查字段数(NF)是否等于预期的,否则跳过该行。
  • 顺便说一句,脚本来自stackoverflow.com/a/19451399/1983854
  • 是的,这不是我的剧本,先生。 glen 是作者,但这有问题吗?如果是的话,我很抱歉。
  • 列仅由制表符分隔

标签: string bash text awk gaps-in-data


【解决方案1】:

问题包含歧义。查看数据:

chr1    235     A     B 
chr2     A      B
chr3    225     B

也许在chr2 行中,我们可以猜测ID 列丢失了,因为IDs 是数字。我们缺少一列,它是数字列,所以它必须是ID

但是在第三行,我们怎么知道缺少REF 列,而不是ALT

如果ALT 永远不会丢失,那么这很简单。但是,如果其中一个可能丢失,那可能是不可能的。

在任何情况下,在您编写程序代码以将数据重新规范化为适当的列之前,您必须能够清楚地阐明识别哪些列缺失的规则,或者认识到这是不可能的并放弃。

您可能只需要上游并找到相同数据的更好来源,而该来源没有经过修改的列。

【讨论】:

  • ALT 永远不会丢失