Necesita tomar la cuarta palabra de una línea y copiarla al inicio de la línea (sed awk)

Necesita tomar la cuarta palabra de una línea y copiarla al inicio de la línea (sed awk)

Tengo un archivo con 5 millones de líneas:

xx ss ss "abcde"

Necesito tomarlo "abcde"y copiarlo al comienzo de cada línea:

"abcde" xx ss ss "abcde"

La cadena "abcde"cambia en cada línea, por lo que no es una palabra específica, pero siempre es la cuarta palabra en cada línea.

Respuesta1

Una alternativa awk:

awk '{print $4,$0}' file

Pruebas:

$ cat file7
abc def ghi nop
klm one two three
four five six nine

$ awk '{print $4,$0}' file7
nop abc def ghi nop
three klm one two three
nine four five six nine

Respuesta2

Con sed, asumiendo que las columnas están separadas por varios espacios y podría haber columnas adicionales:

sed 's/\([^ ]* *\)\{3\}\([^ ]*\)/\2 &/'

El patrón coincide con tres columnas repetidas, identificadas como no espacios seguidas de espacios, seguidas de otra columna, a la que se hace referencia \2en la cadena de reemplazo. Coloca &toda la coincidencia en el reemplazo, por lo que la cuarta columna se inserta antes de que quede todo el resto de la línea.

Tenga en cuenta que esto funcionará con más de cuatro columnas, pero fallará si no hay una cuarta columna.

Lo mismo cuando hay expresiones regulares extendidas disponibles (FreeBSD o GNU sed):

sed -E 's/([^ ]* *){3}([^ ]*)/\2 &/'

Respuesta3

Hay mejores respuestas aquí, pero aquí hay un bucle for in que también funciona:

IFS=$'\n'; for i in $(cat file); do var=$(echo $i | awk '{print $4}')  ; sed -i "s/.*$var/$var &/g" file ;done

Respuesta4

Colocamos el cuarto campo $F[3]junto con el separador de lista $"(que por defecto es space) al principio del registro/línea. La -popción será autoprintel registro.

perl -pale 's/^/$F[3]$"/' yourfile

Con el comando sed guardamos una copia del original y vallamos el 4º campo. Luego quitamos la parte principal. Y restablezca el original agregándolo al espacio del patrón, que ahora contiene el cuarto campo.

sed -e '
   /\n/!h
   //!s/\S\+/\n&\n/4
   /\n.*\n/D
   s/\n.*//;G;s/\n/ /
' yourfile

información relacionada