Sortieren/Zählen einer durch Tabulatoren getrennten Datei

Sortieren/Zählen einer durch Tabulatoren getrennten Datei

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

verwandte Informationen