如何使用awk用冒号符号连接多列?

ana*_*ria 1 awk text-processing

我有一个这样的文件:

head 1kG_MDS6.bim
1   rs2073813   0   753541  A   G
1   rs60320384  0   769223  G   C
1   rs59066358  0   771967  A   G
...
Run Code Online (Sandbox Code Playgroud)

我想连接由“:”分隔的第 1、4、6 和 5 列(按此顺序)

所以输出看起来像这样:

1:753541:G:A
1:769223:C:G
1:771967:G:A
Run Code Online (Sandbox Code Playgroud)

我试过这个:

awk ' { print $1 $4 $6 $5 ":" $NF } ' 1kG_MDS6.bim > 1kG_MDS6_SNPs1.txt
Run Code Online (Sandbox Code Playgroud)

但它与“:”只是最后两列连接

Arc*_*mar 6

使用 printf

awk ' { printf "%s:%s:%s:%s\n",$1,$4,$6,$5; } ' 
Run Code Online (Sandbox Code Playgroud)

在哪里

  • %s 将被匹配的参数替换为字符串。
  • \n 将为每个已处理的行添加换行符


Cyr*_*rus 5

使用输出字段分隔符。

awk 'BEGIN{OFS=":"} {print $1,$4,$6,$5}' file
Run Code Online (Sandbox Code Playgroud)

输出:

1:753541:G:A
1:769223:C:G
1:771967:G:A