Объединить строки с одинаковым начальным полем

Обратите внимание, что gensubявляется расширением gawk, оно не будет работать ни с одной другой реализацией awk. Также обратите внимание, что унарный оператор +не приводит к принудительному числовому преобразованию во всех реализациях awk, использование + 0более переносимо.

Здесь можно сделать:

tmux -V | awk -F '[.]' '{maj = $2+0; min = $3+0; print maj, min}'

Если вы не возражаете против использования расширений GNU awk, вы также можете:

tmux -V | awk -v FPAT='[0-9]+' '{maj = $1; min = $2; print maj, min}'
0
21.03.2021, 04:09
2 ответа
$ awk '
    { for (i=2; i<=NF; i++) if (!seen[$1,$i]++) map[$1] = map[$1] OFS $i }
    END { for (key in map) print key map[key] }
' file
A foo1 foo2 foo3 foo4
B bar
C ccc

Вышеизложенное предполагает, что вам не важен порядок строк вывода.

2
28.04.2021, 22:59
cat - <<\eof > file
A foo1
B bar
A foo2
A foo3 foo2
C ccc
eof

awk '
{
  word = $1
  for (i=2; i<=NF; i++) {
    meaning = $i
    sep = (!(word in dict) ? "" : OFS)
    dict[word] = dict[word] \
     (!seen[meaning]++ ? sep meaning : "")
  }
}
END {
  for (word in dict)
    print word, dict[word]
}
' file

A foo1 foo2 foo3
B bar
C ccc
0
28.04.2021, 22:59

Теги

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