Título: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 7 Septiembre 2009, 13:09 pm Bueno a ver si me explico un poco, estoy hacien un script que recoja datos por columnas de dos archivos diferentes y genero otro nuevo que contiene las columnas de cada archivo que me interesan, lo intento hacer con bucles for junto con cut para las columnas pero se me quedan en bucles infinitos....
si me pudierais dar unas ideas para hacerlo... Gracias Título: Re: ayuda con script, :( Publicado por: Novlucker en 7 Septiembre 2009, 13:19 pm Como que el scripting es muy amplio como para adivinar en que lenguaje quieres hacerlo no? :rolleyes:
Shell scripting?, sería bueno tener una idea de la estructura original de los datos, así como lo que llevas hecho Saludos Título: Re: ayuda con script, :( Publicado por: dark_fidodido en 7 Septiembre 2009, 13:46 pm es en shell script de linux
tengo generados dos archivos separados por tabuladores y por columnas ordenadas ^^ lo que quiero es unirlos solamente y estaba intentando leerlos por columnas (que son un total de 9) y unirlas en un nuevo archivo colunma=cut -f nºcolumna -d "la separacion" archivo.txt (para cada una de las columnas independiente) for colum1 in columna; do punto for columna2 punto2 for columna3 punto 3 if punto1=punto2=punto3 copio la 1 linea de cada culumna fi punto3 +1 done punto2 +1 done punto+1 done algo asi no lo he puesto real es orientativo Título: Re: [shell script] ayuda con script, :( Publicado por: leogtz en 7 Septiembre 2009, 16:20 pm Con AWK, lo harías fácilmente.
Ejemplo: Código: leo@lein:~/Escritorio$ cat "file.txt" Y con cut: Código: leo@lein:~/Escritorio$ cat file.txt | cut -d ' ' -f 1 Título: Re: [shell script] ayuda con script, :( Publicado por: ^Tifa^ en 7 Septiembre 2009, 16:29 pm Ya habia pensado en AWK mira:
Código: gawk '{ print $2 }' archivo.txt > nuevo.txt && gawk '{ print $1 }' archivito.txt >> nuevo.txt donde Código: bash-3.1$ cat archivo.txt Título: Re: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 8 Septiembre 2009, 09:18 am si terminan los bucles!!! pero me tarda muSHo xDDD
voy a ver con el awks ahora os cuento gracias Pues no me funciona bien ya que me coge mal las separaciones.... modifico: no podria con el cut copiar las columnas y pegarlas en un archivo nuevo? tambien por columnas?? es lo que intentaba hacer con los bucles... otra cosa.. como puedo hacer que un archivo lo que lea como " lo borre Título: Re: [shell script] ayuda con script, :( Publicado por: leogtz en 8 Septiembre 2009, 16:58 pm si terminan los bucles!!! pero me tarda muSHo xDDD voy a ver con el awks ahora os cuento gracias Pues no me funciona bien ya que me coge mal las separaciones.... modifico: no podria con el cut copiar las columnas y pegarlas en un archivo nuevo? tambien por columnas?? es lo que intentaba hacer con los bucles... otra cosa.. como puedo hacer que un archivo lo que lea como " lo borre Por favor, vuelve a postear tu duda, pero usando signos de puntuación, así es dificil ayudarte bien. Título: Re: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 8 Septiembre 2009, 17:15 pm .....
está bien, no veo que haya problemas de puntuacion como para no entenderlos... pero vale... 1º- el awk no me funciona bien, ya que coge mal las separaciones, porque tiene varias de distinto tipo en el mismo archivo 2º como podria copiar con el comando "cut" las columnas y pegarlas en otro archivo nuevo, sin que salieran una debajo de otra, que es lo que intentaba hacer con los bucles 3º como leo de un archivo el caracter " y lo borro cada vez que lo encuentre... 4º y última como se añaden lineas en un archivo en una posicion concreta Gracias Título: Re: [shell script] ayuda con script, :( Publicado por: kevlar en 8 Septiembre 2009, 18:32 pm Saludos.
Entiendo que quieres escribir las columnas de dos archivo en uno. Puede ser más simple pero se me ocurre lo siguiente: Primero vemos el número de lineas: Faltan las comillas de ejecución NL1=[comillas de ejecución]wc -l ARCHIVO1.txt | awk '{print $1}' [comillas de ejecución] NL2=wc -l ARCHIVO2.txt | awk '{print $1}' Ahora extraemos los campos que nos interesan: De nuestro primer archivo y linea1: COL1ARCH1=head -1 ARCHIVO1.txt | cut -d ' ' -f 1 COL2ARCH1=head -1 ARCHIVO1.txt |tail -1| cut -d ' ' -f 3 De nuestro segundo archivo y linea1: COL1ARCH2=head -1 ARCHIVO2.txt | cut -d ' ' -f 3 COL2ARCH2=head -1 ARCHIVO2.txt |tail -1| cut -d ' ' -f 5 Hasta aquí si nuestros archivos fueran archivo1: archivo2 uno dos tres cuatro cinco primero segundo tercero cuarto quinto Los campos elegidos formarían al nuevo archivo: echo $COL1ARCH1 $COL2ARCH1 $COL1ARCH2 $COL2ARCH2 > nuevo_archivo.txt uno tres tercero quinto Bueno esto es con la primer linea en la segunda debemos utilizar una variable, y agregar un tail, por ejemplo para trabajar con la línea 2 head -2 archivo1.txt | tail -1 Aquí es donde entra tu FOR head -$i archivo1.txt | tail -1 La variable $i debe aumentar hasta ser igual al numero de registros NL1 si el número de registros es diferente, entonces se debería insertar un TAB en lugar del registro faltante y el FOR se debería hacer en base al número de registros mayor NL1 ó NL2 Disculpen , no me salen las comillas de ejecución COL1ARCH1=[comillas de ejecución]head -1 ARCHIVO1.txt | cut -d ' ' -f 1[comillas de ejecución] Bueno la idea básica ya esta, espero te sirva. Para tu tercer punto busca información sobre EXPRESIONES REGULARES. Suerte :) Título: Re: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 8 Septiembre 2009, 18:52 pm mmmmm vale perfect!
ya casi lo tengo, solo me falta añadir lineas en blanco para que cuadren las columnas ^^ alguna idea? Título: Re: [shell script] ayuda con script, :( Publicado por: kevlar en 9 Septiembre 2009, 01:32 am Ups. Puedes insertar un tabulador print /t pero si el tamaño de los campos no es constante se descuadra de igual manera. Con algo de AWK se puede hacer especificando el ancho del campo. Creo que tienes que crear un archvivo con comados de AWK para que te reconozca el printf. Hay algunas variables interesantes como FS, NR, NF http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf (http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf) printf "%4s", "cadena" Por otra parte si lo que quieres es insertar renglones print /n Título: Re: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 9 Septiembre 2009, 10:23 am jop, no me sirve ninguna de las 2 formas
a ver si esto vale for blucle1;do for bucle2;do if bucle1==bucle2;then el print que yo quiero >> archivo fi done done ¿que podria añadir aqui para que cuando la condicion del "if" sea verdadera, volviera al principio del 1º for, y con los incrementos de las variables de cada bucle for hechos? Título: Re: [shell script] ayuda con script, :( Publicado por: kevlar en 9 Septiembre 2009, 16:18 pm Es muy general tu código y tus preguntas :-\
Trata de ser más especifico, de otra forma lo único que podemos hacer es imaginar que es lo que quieres. En tu última pregunta la respuesta la sabes solo tu, ya que tu estas tratando de resolver el problema. Desconocemos como son tus archivos, número de registros (iguales o diferentes), que campos quieres integrar en el nuevo archivo, que campos deben estar en blanco etc, etc, y un largo etc. Título: Re: [shell script] ayuda con script, :( Publicado por: kevlar en 9 Septiembre 2009, 17:26 pm Aquí utilice el pipe como separador de campo puede ser el [ESPACIO] tradicional. Estoy oxidado con el AWK así que luego posteo lo de la alineación. ;D
armando@armando-desktop:~$ more archivo1.txt campo1|test|prueba|camino roca|telefono|calles|primer vidrio|plastico|papel|mesa armando@armando-desktop:~$ more archivo2.txt pared|corbata|zapatos|anillo muro|traje|manos|ventana cabello|copas|cuadro|silla armando@armando-desktop:~$ ./lista.sh campo1|prueba|zapatos|anillo roca|calles|manos|ventana vidrio|papel|cuadro|silla armando@armando-desktop:~$ more lista.sh REG1=`wc -l archivo1.txt | awk '{print $1}'` REG2=`wc -l archivo2.txt | awk '{print $1}'` `> nuevo.txt` for (( i=0; i<$REG1; i++ )) do let CAB=$i+1 COL1ARCH1=`head -$CAB archivo1.txt |tail -1 | cut -d '|' -f 1` COL2ARCH1=`head -$CAB archivo1.txt |tail -1 | cut -d '|' -f 3` COL1ARCH2=`head -$CAB archivo2.txt |tail -1 | cut -d '|' -f 3` COL2ARCH2=`head -$CAB archivo2.txt |tail -1 | cut -d '|' -f 4` echo $COL1ARCH1"|"$COL2ARCH1"|"$COL1ARCH2"|"$COL2ARCH2 >> nuevo.txt done LISTO. Al copiar y pegar se descuadra en el post, pero en la consola aparecen espaciados los campos. armando@armando-desktop:~$ awk -f lista.awk nuevo.txt campo1 prueba zapatos anillo roca calles manos ventana vidrio papel cuadro silla armando@armando-desktop:~$ more lista.awk BEGIN{FS="|"} {printf"%-10s %-10s %-10s %-10s\n",$1,$2,$3,$4} END{} armando@armando-desktop:~$ -----------------Por cierto ¿Como inserto una imagen? Título: Re: [shell script] ayuda con script, :( Publicado por: dark_fidodido en 16 Septiembre 2009, 10:28 am Gracias ya lo solucioné con tail y cut ^^
Sabeis como puedo sustituir un parámetro por otro o borrarlo de las lineas de un documento?? o como borrar el 1º caracter de cada linea??? es lo unico k me falta para mi script!!! jejje Gracias de nuevo a todos por vuestra ayuda modifico: ya solucione lo de borrar el 1º caracter ^^ cut -c 2-20 archivo >> nuevoarchivo modifico: sustituir un caracter por otro: en mi caso un caracter en blaco por un "." tr [" ]" . < archivo.txt >> archivonuevo.txt gracias a todos ya se puede cerrar el post!!!!!!!! |