Ich habe eine Datei wie unten ..
abc, 12345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 56345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 15475
def, text and nos
ghi, something else
jkl, words and numbers
abc, 123345
def, text and nos
ghi, something else
jkl, words and numbers
Ich möchte es konvertieren (beitreten) als:
abc, 12345, 56345, 15475, 123345
def, text and nos, text and nos,text and nos,text and nos
ghi, something else, something else, something else, something else
jkl, words and numbers, words and numbers, words and numbers, words and numbers
text-processing
command-line
awk
join
merge
pvkbhat
quelle
quelle
Antworten:
Wenn Ihnen die Reihenfolge der Ausgabe nichts ausmacht:
Erläuterung
NF>1
Das heißt, wir müssen nur eine Zeile verarbeiten, die nicht leer ist.a
, wobei der Schlüssel das erste Feld ist, der Wert das zweite Feld (oder der Rest der Zeile). Wenn der Schlüssel bereits einen Wert hat, konzentrieren wir uns auf zwei Werte.END
Block durchlaufen wir das assoziative Arraya
und drucken alle seine Schlüssel mit dem entsprechenden Wert.Oder mit
perl
wird die Reihenfolge beibehalten:quelle
perl -F, -lane 'next unless /./;push @{$k{$F[0]}}, ",@F[1..$#F]"; END{print "$_@{$k{$_}}" foreach keys(%k)}' file
:) Großartige Köpfe denken gleich!Oh, das ist einfach. Hier ist eine einfache Version, die die Reihenfolge der Schlüssel in der Datei beibehält:
Die Ausgabe sollte folgendermaßen aussehen:
Wenn es Ihnen nichts ausmacht, am Ende eine zusätzliche Leerzeile zu haben, ersetzen Sie die
printf
Zeile einfach durchprintf("%s %s\n\n", Key[j], Val[Key[j]]);
quelle