0

我有一个如下所示的数据文件:

1   .   0   10109   AA  AA
1   .   0   10123   C   CCCT
1   .   0   10133   A   AAC
1   .   0   10134   A   ACAAC
1   .   0   10140   A   ACCCTAAC
1   .   0   10143   C   CTACT
1   rs144773400 0   10144   T   TA
1   .   0   10146   AC  A
1   .   0   10147   G   C

在“。”的情况下 在第二列中,我想将其替换为第 1 列和第 4 列的合并输出,如下所示:

1   1:10109 0   10109   AA  AA
1   1:10123 0   10123   C   CCCT
1   1:10133 0   10133   A   AAC
1   1:10134 0   10134   A   ACAAC
1   1:10140 0   10140   A   ACCCTAAC
1   1:10143 0   10143   C   CTACT
1   rs144773400 0   10144   T   TA
1   1:10146 0   10146   AC  A
1   1:10147 0   10147   G   C

我一直在尝试使用 if/then 语句来做到这一点......但我知道我的语法错误,我只是不确定有多么错误。

if [$2 -eq "." /data/pathtofile]
then 
    awk '{print $1 ":" $4}'
else 
    awk '{print $2}' >> "/data/cleanfile"
fi 

我错过了什么?

4

1 回答 1

1

你可以通过 awk 本身来做到这一点。

awk -v FS="\t" -v OFS="\t" '$2=="."{$2=$1":"$4}{$1=$1}1' file

或者

$ awk '$2=="."{$2=$1":"$4}{$1=$1}1' file
1 1:10109 0 10109 AA AA
1 1:10123 0 10123 C CCCT
1 1:10133 0 10133 A AAC
1 1:10134 0 10134 A ACAAC
1 1:10140 0 10140 A ACCCTAAC
1 1:10143 0 10143 C CTACT
1 rs144773400 0 10144 T TA
1 1:10146 0 10146 AC A
1 1:10147 0 10147 G C
于 2015-03-17T14:50:08.863 回答