合并每隔一列

Merge every other column

正在尝试合并从 </code> 开始的所有其他制表符分隔列 </p> <pre><code>NC_044998.1 3757 ref ref ref ref ref ref ref ref ref dev

所以输出是

NC_044998.1     3757    refref     refref     refref     refref     refdev

使用

awk 'BEGIN {FS = "\t"} {for (i=3; i<=12; i+=2) {gsub(/\t/, "", $i)1;} print [=12=]};' input

但输出与输入相同

使用 GNU awk:

awk 'BEGIN {FS=OFS="\t"} { for (i=0; i<5; i++){$(i+3)=$(i*2+3) $(i*2+4)} NF=7; print }' input

输出:

NC_044998.1     3757    refref  refref  refref  refref  refdev

这里发生了什么?

  • 第 3 列获取第 3 列和第 4 列的内容。
  • 第 4 列获取第 5 列和第 6 列的内容。
  • 第 5 列获取第 7 和 8 列的内容。
  • 第 6 列获取第 9 列和第 10 列的内容。
  • 第 7 列获取第 11 和 12 列的内容。
  • 列的输出仅限于前 7 列 (NF=7)。

参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

使用 gnu awk,你可以使用正则表达式来做到这一点:

awk -F '\t' -v beg=2 '{
   s=""
   for (i=1; i<=beg; ++i)
      s = s $i FS;
   print s gensub( /\t+(\S+\t*)/, "\1", "g", substr([=10=], length(s)+1) )
}' file
NC_044998.1  3757   refref  refref  refref  refref  refdev

PS:您可以将任何其他列位置作为此 awk 命令中的 beg 参数