Ich würde schreiben
awk -v OFS=, '
{
key = $1
$1 = ""
values[key] = values[key] $0
}
END {
for (key in values) {
sub(/^,/, "", values[key])
print key " " values[key]
}
}
' file
Wenn Sie nur die eindeutigen Werte für jeden Schlüssel (erfordert GNU awk für mehrdimensionale Arrays)
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
oder Perl
perl -lane '
$key = shift @F;
$values{$key}{$_} = 1 for @F;
} END {
$, = " ";
print $_, join(",", keys %{$values{$_}}) for keys %values;
' file
Bearbeiten Sie Ihre Frage, um zu zeigen, was Sie bisher versucht haben. Selbst wenn es sich nur um Pseudo-Code handelt, würde es sich Mühe geben, Ihr Problem zu lösen und andere zu motivieren, Ihnen zu helfen. Übrigens, damit Sie herausfinden können, welches Werkzeug Sie benötigen: grep ist zum Drucken einer Zeichenkette, die mit einer Regexp in einer Datei übereinstimmt - das ist nicht das, was Sie versuchen zu tun. sed ist für einfache Substitutionen auf einzelnen Zeilen - das ist auch nicht das, was Sie versuchen zu tun. awk ist für alle anderen Textmanipulationen - das ist was du versuchst zu tun. –
Danke. Ich habe es mit awk probiert. – Paul
Großartig, wieder - ** Bearbeiten Sie Ihre Frage, um zu zeigen, was Sie bisher versucht haben. **. –