我的数据看起来像这样
1 3
1 2
1 9
5 4
4 6
5 6
5 8
5 9
4 2
我希望输出为
1 3,2,9
5 4,6,8,9
4 6,2
这只是示例数据,但我原来的数据有更多的值。
答案 0 :(得分:1)
所以这很有用
所以这基本上创建了一个哈希表,使用第一列作为键,第二列作为值:
awk '{line="";for (i = 2; i <= NF; i++) line = line $i ", "; table[$1]=table[$1] line;} END {for (key in table) print key " => " table[key];}' trial.txt
输出
4 => 6, 2
5 => 4, 6, 8, 9
1 => 3, 2, 9
答案 1 :(得分:0)
我会写
awk -v OFS=, '
{
key = $1
$1 = ""
values[key] = values[key] $0
}
END {
for (key in values) {
sub(/^,/, "", values[key])
print key " " values[key]
}
}
' file
如果只想要每个键的唯一值(需要GNU awk用于多维数组)
gawk -v OFS=, '
{ for (i=2; i<=NF; i++) values[$1][$i] = i }
END {
for (key in values) {
printf "%s ", key
sep = ""
for (val in values[key]) {
printf "%s%s", sep, val
sep = ","
}
print ""
}
}
' file
或perl
perl -lane '
$key = shift @F;
$values{$key}{$_} = 1 for @F;
} END {
$, = " ";
print $_, join(",", keys %{$values{$_}}) for keys %values;
' file
答案 2 :(得分:0)
如果不关心密钥的顺序,我认为这是惯用的awk
解决方案。
$ awk '{a[$1]=($1 in a?a[$1]",":"") $2}
END{for(k in a) print k,a[k]}' file |
column -t
4 6,2
5 4,6,8,9
1 3,2,9