Для поддержания порядка, вам нужно следить за ним:
awk '
! seen[$1]++ {order[++n] = $1}
{value[$1] = value[$1] $2}
END {for (i=1; i<=n; i++) print order[i], value[order[i]]}
' <<END
22 Hello
22 Hi
1 What
34 Where
21 is
44 How
44 are
44 you
END
22 HelloHi
1 What
34 Where
21 is
44 Howareyou
Если вы знаете значения в 1-м столбце являются смежными, так как в тексте образца, а затем:
awk '
prev != $1 {printf "%s%s ", sep, $1; sep=RS}
{printf "%s", $2; prev = $1}
END {print ""}
'
несколько других подходов:
perl -lane '
push @keys, $F[0] unless grep {$_ eq $F[0]} @keys;
$val{$F[0]} .= $F[1]
} END {
print "$_ $val{$_}" for @keys
' file
и, достигая путь в нишу зоны
#!/usr/bin/env tclsh
while {[gets stdin line] != -1} {dict append val {*}$line}
dict for {k v} $val {puts "$k $v"}
Я думаю, что это будет * путь * проще для использования, например, Python для этого. Вы уверены, что собираетесь использовать awk? –
Да, я определенно ищу решение awk – user1502952
@ UliKöhler: ты шутишь !? :-) С нетерпением жду ответа на Python. Я буду голосовать за любой рабочий ответ, который вы хотите опубликовать. Всем удачи. – shellter