El día 27 de septiembre de 2011 06:59, Pablo Jiménez <pejim...@vtr.net> escribió: > On Mon, Sep 26, 2011 at 10:54:17PM -0500, rantis cares wrote: >> >> El día 26 de septiembre de 2011 22:45, Pablo Jiménez >> <pejim...@vtr.net> escribió: >>> >>> On Mon, Sep 26, 2011 at 10:02:09PM -0500, rantis cares wrote: >>>> >>>> Listeros: >>>> >>>> Buenas noches (dias) a todos. >>>> >>>> Fijense que recurro nuevamente a ustedes para la siguiente consulta. >>>> >>>> tengo un archivo (tirar.txt) que contiene los siguientes datos: >>>> >>>> >>>> dato1 dato2 dato3 dato4 >>>> dato1 dato2 dato3 dato4 >>>> dato1 dato2 dato3 dato4 >>>> dato1 dato2 dato3 dato4 >>>> dato1 dato2 dato3 dato4 >>>> dato1 dato2 dato3 dato4 >>>> >>>> Cada uno de los datos es diferente (llamese nombre, apellidos etc). >>>> >>>> Con el comando awk puedo hacer lo siguiente: >>>> >>>> awk '{print $1}' tirar.txt >>>> >>>> dato1 >>>> dato1 >>>> dato1 >>>> dato1 >>>> dato1 >>>> dato1 >>>> >>>> Y todo bastante bien, pero ahora quiero que la columna de dato1 me sea >>>> mostrado uno por uno y ejecute cierta accion (con otro comando). Para >>>> ello ejecuto la siguiente linea de ordenes >>>> >>>> if [ -e tirar.txt ]; then >>>> for i in `cat tirar.txt`; >>>> do >>>> >>>> # Aqui es donde me encue4ntro con el error, porque para ejecutar awk, >>>> necesito el archivo sobre el que se ejecutara y yo quiero que imprima >>>> el for i in `cat tirar.txt` >>>> awk awk '{print $1}' $i >>>> >>>> done >>>> >>>> else >>>> echo "" >>>> echo "No se puede ejecutar la orden" >>>> >>>> fi >>>> >>>> >>>> Alguna idea?. >>> >>> cat está demás. Basta y sobra con awk. >> >> ¿Esta demas?. cat lo que hace es mostrar linea por linea, si yo >> ejecuto awk me muestra todos los datos que existen en la columna y yo >> quiero que me muestro todos los datos pero de uno en uno, por eso >> extoy ejecutando cat al archivo tirar.txt >> >> Lo que estoy intentando es hacer un bucle y hasta que encuen tre la >> ultima linea de datos, entonces se detiene y listo. > > Envía el mensaje a la lista, no al correo personal. > > Sobre lo que mencionas, awk procesa los datos línea por línea. > > if [ -e tirar.txt ] > then > awk ' > $1 ~ /REGEX/ { # puede ser ésta u otra condición > print $1 > system("/orden/a/ejecutar") > } > $1 !~ /REGEX/ { > print "No se puede ejecutar la orden" > } > ' > fi > > Ahora bien, si sólo quieres imprimir la primera columna en la línea, mejor > te vales de cut: > > FILE=/path/to/file.txt > if [ -e $FILE ] > then > for line in $(cat $FILE) > do > echo $line | cut -d' ' -f 1 > done > else > echo "No puedo leer archivo/fichero $FILE" > fi > > El único detalle es que el delimitador que usas en los campos de cada línea > en tirar.txt deben ser bien conocidos y regulares (espacio, tabulador, algún > otro caracter...). > > Si aún deseas matar moscas con un fusil (ie. usar awk), puedes reemplazar > cut en el script anterior. > > FILE=/path/to/file.txt > if [ -e $FILE ] > then > for line in $(cat $FILE) > do > echo $line | awk '{ print $1 }' > done > else > echo "No puedo leer archivo/fichero $FILE" > fi > > Saludos. > > -- > Pablo Jiménez > > > -- > To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact > listmas...@lists.debian.org > Archive: http://lists.debian.org/20110927045900.ga15...@example.net > >
Y no vale un simple for: for a in $(awk '{print $1}' tirar.txt) ..... S2 -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/CAGw=rHgv-ROPy5waEVuMenPv=_0CS5v+0EYe¤=tbefddh...@mail.gmail.com