合并表中的部分重复行

合并表中的部分重复行

输入是一个由制表符分隔的多行设置文件。

h1 h2 h3 x  y      h4 h5 h6 h7
a  b  c  h4 true
a  b  c  h5 false 
a  b  d  h4 false
m  n  o  h6 true
m  n  o  h7 false
p  q  r  h4 true

输出如下。

h1 h2 h3  h4    h5    h6    h7
a  b  c   true  false
a  b  d   false
m  n  o               true  false
p  q  r   true

我该如何实现这一点?我正在尝试使用 awk 进行一些循环,尽管我知识有限,但我没有主意。

awk -F'\t' '($1!=old1 || $2!=old2 || $3!=old3) && NR>2 
    {
        for (i=1;i<=NF;i++) 
            print a[i];
    } 
    {
        old1=$1;old2=$2;old3=$3;
        for (i=1;i<=NF;i++) 
        {
            a[i]= $i;
        }
    } 
    END{for (i=1;i<=NF;i++) print a[i];}' $tmpfile1

答案1

您可以在 GNU awk 中使用二维数组执行以下操作:

$ gawk '
  BEGIN {
    OFS=FS="\t"
  }
  NR==1 {
    print "h1","h2","h3","h4","h5","h6","h7"
    next
  }
  {
    a[$1 FS $2 FS $3][$4] = $5
  }
  END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (k in a) {
      print k, a[k]["h4"],a[k]["h5"], a[k]["h6"], a[k]["h7"]
}
  }
' file
h1      h2      h3      h4      h5      h6      h7
a       b       c       true    false
a       b       d       false
m       n       o                       true    false
p       q       r       true

相关内容