我有一个形式的符号表(键值对)
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)