texto sort separador script lineas leer fichero extraer ejemplos como comando columnas campos cadena buscar archivo agregar linux bash awk

linux - sort - ¿Utiliza awk para alinear columnas en el archivo de texto?



como agregar texto a un archivo en linux (3)

¿Sería útil convertir "Entrada" a "Salida deseada"?

Entrada

testing speed of encryption test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes) test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes) test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes) test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes) test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes) test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)

Salida deseada

testing speed of encryption test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes) test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes) test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes) test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes) test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes) test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)


Sí. Mira la sintaxis de la función printf () de awk. Código de muestra abreviado . .

{ printf("%s %2s ", $1, $2); printf("%4s %s %s ", $3, $4, $5); printf("%4s %s %s ", $6, $7, $8); printf("%7s/n", $9); }

Salida.

test 0 (64 bit key, 16 byte blocks): 2250265 test 1 (128 bit key, 64 byte blocks): 879149 test 2 (128 bit key, 256 byte blocks): 258978 test 3 (128 bit key, 1024 byte blocks): 68218 test 4 (128 bit key, 8192 byte blocks): 8614 test 10 (256 bit key, 16 byte blocks): 1790881

Documentos para GNU awk''s printf () .

Hay varias formas de pasar el "encabezado" sin modificaciones. De esta forma se supone que siempre está en la primera línea del archivo.

NR==1 { print $0} NR>1 { printf("%s %2s ", $1, $2); printf("%4s %s %s ", $3, $4, $5); printf("%4s %s %s ", $6, $7, $8); printf("%7s/n", $9); }


Un truco para alinear a la derecha con la column es usar rev :

$ head -1 file; tail -n+2 file | rev | column -t | rev testing speed of encryption test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes) test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes) test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes) test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes) test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes) test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)


awk '' FNR==1 { if (NR==FNR) print; next } NR==FNR { for(i=1;i<=NF;i++) w[i] = (w[i] <= length($i) ? length($i) : w[i]) next } { for(i=1;i<=NF;i++) printf "%*s",w[i]+(i>1?1:0),$i print "" } '' file file