如何只解析一个具有不同分隔符的列?

时间:2014-02-25 17:28:03

标签: awk

我有一个制表符分隔的文件。最后一列是以分号分隔的,具有不相等的长行。我想解析这个专栏。

输入:

AA   762    8640    BB    CC     DD      EE=T;FF=C;GG=G;HHA
II   852    6547    JJ    KK     LL      MM=G;NN=P;QQ=RF

期望的输出:

AA   762    8640    BB    CC     DD      EE=T    FF=C    GG=G   HHA
II   852    6547    JJ    KK     LL      MM=G    NN=P    QQ=RF

我可以得到例如使用此代码的前三个值:

awk 'BEGIN { FS=";" } { print $1, $2, $3}' file

但是,当我运行它时,它不解析列,只是按原样打印文件:

awk 'BEGIN { FS=";" } { print $0}' file

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以尝试以下内容:

awk 'BEGIN{FS=OFS="\t"}{gsub(/;/,"\t",$NF)}1' file

$ cat file
AA  762 8640    BB  CC  DD  EE=T;FF=C;GG=G;HHA
II  852 6547    JJ  KK  LL  MM=G;NN=P;QQ=RF

$ awk 'BEGIN{FS=OFS="\t"}{gsub(/;/,"\t",$NF)}1' file
AA  762 8640    BB  CC  DD  EE=T    FF=C    GG=G    HHA
II  852 6547    JJ  KK  LL  MM=G    NN=P    QQ=RF

答案 1 :(得分:3)

另一种方法

awk -F'[[:space:];]' -vOFS='\t' '{$1=$1;print}' input.txt
AA  762 8640    BB  CC  DD  EE=T    FF=C    GG=G    HHA
II  852 6547    JJ  KK  LL  MM=G    NN=P    QQ=RF

答案 2 :(得分:2)

使用tr用这样的标签替换分号:

tr ";" "\t" <yourfile