Ich habe eine tabulatorgetrennte Datei mit mehreren Spalten. Ich möchte die Häufigkeit, mit der ich etwas in Spalte A sehe, addieren und die mit dem Wert in Spalte A verknüpften Daten in einer neuen Spalte B drucken.
Ex:
1 blue
1 green
1 red
100 blue
100 red
Ich hätte gerne eine Ausgabedatei mit dem Inhalt
3 1 blue,green,red
2 100 blue,red
Gibt es eine Möglichkeit, dies mit awk oder Perl zu tun?
Antwort1
in awk:
{
if (count[$1] == "") {
count[$1] = 1;
results[$1] = $2;
} else {
count[$1] = count[$1] + 1;
results[$1] = results[$1] "," $2;
}
}
END {
for (number in count) {
print count[number],number,results[number];
}
}
ergibt die Ausgabe von:
2 100 blue,red 3 1 blue,green,red
für Ihre Beispieldaten oben.
Die Reihenfolge der Ergebnisse entspricht möglicherweise nicht ganz Ihren Wünschen. Ich bin nicht sicher, wie wichtig das für Sie ist.
Antwort2
Folgendes habe ich versucht und es könnte für Sie funktionieren. HINWEIS: "\011"
= Tabulatorzeichen, ändern in " "
für Leerzeichen)
awk 'BEGIN { s = "\011"; c = "," ; cnt = 0; all_colors = "" } {
if ( NR == 1 ) { num = $1; colors[cnt++] = $2 }
else {
if ( num != $1 ) {
for (x=0; x<cnt; x++) {
all_colors = all_colors colors[x]
}
print cnt s num s all_colors; cnt = 0; all_colors = ""
num = $1; colors[cnt++] = $2
}
else { colors[cnt++] = c $2 }
}
}
END {
all_colors = ""
for (x=0; x<cnt; x++) { all_colors = all_colors colors[x] }
print cnt s num s all_colors
}' tab_file
tab_file output
1 blue 3 1 blue,green,red
1 green 2 100 blue,red
1 red
100 blue
100 red