Esta tubería es más rápida que la otra respuesta más rápida por un factor significativo (ver resultados). Utiliza tr
y tac
. Necesita utilizar 2 bytes ASCII (\ x00- \ x7F) que no existen en sus datos.
\x00
Por lo general, es una buena opción, \x01
pero puede usar cualquier byte ASCII que no esté en los datos.
En este ejemplo, ESPACIO y TAB como delimitadores de caracteres. Los delimitadores pueden ser de varios bytes o simples. El delimitador de salida es un espacio único.
Aquí está el comando. El nombre del archivo muestra el numberof fields
_xnumber of lines
<"$file" tr ' \t\n' '\0\0\1' |tr -s '\0' '\n' |tac |tr '\n' ' ' |tr '\1' '\n'
Si desea / necesita verificar los bytes no utilizados, puede verificar de antemano con este awk
script opcional . El tiempo total, incluso cuando se ejecuta este script opcional, sigue siendo significativamente más rápido que otros métodos (hasta ahora :) .. Aquí está el script de preprocesamiento.
o=($(<"$file" char-ascii-not-in-stream)); x="${o[0]}"; y="${o[1]}"
<"$file" tr ' \t\n' "$x$x$y" |tr -s "$x" '\n' |tac |tr '\n' ' ' | tr '$y' '\n' >"$file".$user
Este es el script awk: char-ascii-not-in-stream
#!/usr/bin/awk -f
{c[$0]} END{for(i=0;i<=127;i++) {if(sprintf("%c", i) in c);else {printf "\\%03o ",i}}}
El segundo conjunto de tiempos, para este script, incluye char-ascii-not-in-stream
el tiempo de.
Peter.O {tr,tac,tr} ==== file_10_x10000
real 0m0.013s 0m0.015s
user 0m0.020s 0m0.020s
sys 0m0.008s 0m0.012s
user11136 {python} ===== file_10_x10000
real 0m0.057s
user 0m0.048s
sys 0m0.008s
jmp {python} =========== file_10_x10000
real 0m0.160s
user 0m0.160s
sys 0m0.000s
rush {awk} ============= file_10_x10000
real 0m0.121s
user 0m0.120s
sys 0m0.000s
##############################################
Peter.O {tr,tac,tr} ==== file_1000_x1000
real 0m0.048s 0m0.059s
user 0m0.040s 0m0.040s
sys 0m0.040s 0m0.048s
user11136 {python} ===== file_1000_x1000
real 0m0.158s
user 0m0.136s
sys 0m0.028s
jmp {python} =========== file_1000_x1000
real 0m0.327s
user 0m0.320s
sys 0m0.008s
rush {awk} ============= file_1000_x1000
real 0m0.832s
user 0m0.820s
sys 0m0s012s
##############################################
Peter.O {tr,tac,tr} ==== file_1000000_x50
real 0m5.221s 0m6.458s
user 0m4.208s 0m5.248s
sys 0m2.624s 0m2.396s
user11136 {python} ===== file_1000000_x50
real 0m16.286s
user 0m10.041s
sys 0m5.148s
jmp {python} =========== file_1000000_x50
real 0m22.845s
user 0m20.705s
sys 0m1.140s
rush {awk} ============= file_1000000_x50
real 0m44.793s
user 0m43.583s
sys 0m0.848s
##############################################
perl -lane 'print join " ", reverse @F'