Por favor, ayúdame a descubrir cómo resolver esto usando sed
.
Dado el siguiente texto:
Kerala 4222 8129 8163 8164 Delhi 8502 8503 8504 8505 Goa 1 39 45
Quiero convertirlo al siguiente formato:
Kerala,4222 Kerala,8129 Kerala,8163 Delhi,8502 Delhi,8503 Delhi,8504 Delhi,8505 Goa,1 Goa,39 Goa,45
sed
text-manipulation
transpose
jamsheer np
fuente
fuente
sed
y noawk
(operl
,python
etc)?Respuestas:
Supongamos que su archivo tiene el nombre
test1
El comando completo se ve así (en una línea):
Para una mejor vista, mira este script:
Ahora quiero describir todas las partes del comando
DESCRIPCION DEL COMANDO
El comando
names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g")
me da una lista de los nombres separados con un punto y coma, en su casoKerala;Delhi;Goa
. Los quiero de esta forma, porque ahora puedo cambiarlos a una matriz con el segundo comandonames2=(${names//;/ })
. Ahora itero a través de todos los nombres, que se hace con la primerafor
lazo.El comando
numbers=$(cat test1 | sed -n "/$var/{n;p}" |sed "s/\s/;/g");
Me da los números para la variable actual.$var
. Es decir. paraKerala
esto sería4222;8129;8163;8164
. El comportamiento es el mismo que en el primer comando: quiero cambiarlos a una matriz, así puedo iterarlos, lo cual se hace con el siguiente comandonumbers2=(${numbers//;/ });
. Ahora recorro los números y los imprimo en la pantalla.Espero que esto sea entendible.
fuente