Mover un caracter de una línea al final de la misma

Imagen de ezitoc
0 puntos

Hola a todos!

Hace poco he comenzado a utilizar un programa que requiere un formato especial para la introducción de datos. El tema es que para generar estos datos es complicado. Sin embargo utilizo un programa que me tira dichos datos en un formato parecido al que necesito pero no del todo igual. Paso a poner un ejemplo para que se entienda lo que tendría que hacer el script:

################################################
14

H 1.19532 -0.18670 2.16795
C 0.68419 -0.10501 1.21252
C -0.71297 -0.02212 1.19921
H -1.24734 -0.04030 2.14610
C -1.40277 0.08211 -0.01102
S -3.17857 0.19123 -0.05600
C -0.68315 0.10399 -1.20753
H -1.20001 0.18518 -2.16179
C 0.71308 0.02145 -1.19546
H 1.25304 0.03977 -2.13926
C 1.40376 -0.08290 0.01455
S 3.17979 -0.18916 0.00158
H 3.36574 -0.19980 1.32891
H -3.39648 0.06638 1.26055
################################################

Y así es como quiero que quede:

################################################
1.19532 -0.18670 2.16795 H
0.68419 -0.10501 1.21252 C
-0.71297 -0.02212 1.19921 C
-1.24734 -0.04030 2.14610 H
-1.40277 0.08211 -0.01102 C
-3.17857 0.19123 -0.05600 S
-0.68315 0.10399 -1.20753 C
-1.20001 0.18518 -2.16179 H
0.71308 0.02145 -1.19546 C
1.25304 0.03977 -2.13926 H
1.40376 -0.08290 0.01455 C
3.17979 -0.18916 0.00158 S
3.36574 -0.19980 1.32891 H
-3.39648 0.06638 1.26055 H
################################################

O sea que lo único que tiene que hacer es mover la primera letra de cada línea al final. Las primeras dos líneas del archivo original no son importantes.

Recién he comenzado a tratar con estos problemas de hacer scripts pero se me complica bastante. Por lo que he visto, con el comando sed capaz se podría hacer lo que necesito pero no se como implementarlo para tales fines.

Aquel que tenga facilidad con estas cosas y me pueda "iluminar" el camino será más que agradecido y de paso yo también iré aprendiendo a crear mis propios programas.

Muchas gracias.

Imagen de joseluis
+1
0
-1

Puedes utilizar cut para recuperar tanto el comienzo de la línea como el resto (suponiendo que lo que quieras mover sea los caracteres que van desde el comienzo de la línea hasta el primer espacio), para luego escribirlo como te interese. Por ejemplo, si en la variable linea tienes el contenido de una de las líneas del fichero que quieres "darle la vuelta", sería algo así como:

 principio=`echo ${linea} | cut -d" " -f1`
 final=`echo ${linea} | cut -d" " -f2-`
 echo "${final} ${principio}"

Con eso lo único que te quedaría es eliminar las dos primeras líneas del fichero (una opción sería usar tail) y recuperar cada línea del fichero en una variable:

 while read linea ; do
   principio=`echo ${linea} | cut -d" " -f1`
   final=`echo ${linea} | cut -d" " -f2-`
   echo "${final} ${principio}"
 done <<< "`cat prueba.txt`"

(en lugar de cat utiliza tail con el número de líneas del fichero menos 2, donde pone prueba.txt pon tu fichero y ya lo tendrias).

+1
0
-1

Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado