将与某个键对应的单词放在一行中

将与某个键对应的单词放在一行中

我有一个形式的符号表(键值对)

01  aaluu desii
01  aaluu cipsa 
01  amaruuda ilaahabaadii
02  hai
02  nahii
02  txamaatxara

首先,我应该将单词(对应于相同的键)放在同一行中。

预期输出是

01 aaluu desii aaluu cipsa amaruuda ilaahabaadii
02 hai nahii txamaatxara

请注意,有一个制表符将输入文件和输出文件中的键与值分开。

答案1

使用 awk:

 awk '{for (i=2; i<=NF; i++) {a[$1]=a[$1]" "$i}} END{for ( i in a){print i"\t"a[i]}}'

a创建一个带有索引(键)的数组$1,并将一行中除第一个字段之外的所有字段附加到该数组。这将对具有相似键的所有行执行此操作。

迭代END数组a索引并打印数组索引(键)以及数组内容(值),键和值之间使用制表符分隔符。

答案2

sed '
    :1                                  #just mark
    N                                   #append next line
    s/^\(\([0-9]\+\s\+\).*\)\n\2/\1 /   #compare nums in the line beginning
    t1                                  #if prev succeed return to mark
    P                                   #print before \newline
    D                                   #delete before \newline, go to start
' <(sort -k1n table.file)

相关内容