объединить частично повторяющиеся строки в таблице

Входные данные - это файл настроек с несколькими строками, разделенными табуляцией.

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
задан 13 December 2020 в 04:57

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
0
ответ дан 13 December 2020 в 02:03

Другие вопросы по тегам:

Похожие вопросы: