Ordenar/contar un archivo delimitado por tabulaciones

Ordenar/contar un archivo delimitado por tabulaciones

Tengo un archivo delimitado por tabulaciones con varias columnas. Me gustaría aumentar la cantidad de veces que veo algo en la columna A e imprimir los datos asociados con el valor en la columna A en una nueva columna B.

Ex:

1 blue                                        
1 green
1 red            
100 blue           
100 red

Me gustaría un archivo de salida que lea

3 1 blue,green,red
2 100 blue,red

¿Hay alguna manera de hacer esto usando awk o perl?

Respuesta1

en 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];
  }
}

da como resultado la salida de: 2 100 blue,red 3 1 blue,green,red

para sus datos de muestra anteriores.

Es posible que el orden de los resultados no sea exactamente el que usted desea, no estoy seguro de cuán importante sea para usted.

Respuesta2

Esto es lo que he probado y que puede funcionar para usted. NOTA: "\011"= carácter de tabulación, cambiar a " "espacio)

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

información relacionada