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