El día 27 de septiembre de 2011 03:16, Juan Antonio <[email protected]> escribió: > El 27/09/11 08:20, fernando sainz escribió: >> El día 27 de septiembre de 2011 06:59, Pablo Jiménez >> <[email protected]> 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 >>>> <[email protected]> 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 [email protected] >>> with a subject of "unsubscribe". Trouble? Contact >>> [email protected] >>> Archive: http://lists.debian.org/[email protected] >>> >>> >> Y no vale un simple for: >> >> for a in $(awk '{print $1}' tirar.txt) ..... >> >> >> S2 >> >> > > O un simple xargs. > > [[ -e file.txt ]] && awk '{print $1}' file.txt | xargs orden_a_ejecutar > > Un saludo.
A veces las presentaciones y las despedidas son mas largas que las respuestas. Mas sorprendido por la sencillez. Gracias > > -- > "Tanto en los deportes como en todo lo demás, soy un experto. Pero para > mantener viva mi inteligencia natural y fuera de serie, tengo que comer mucho" > > > -- > To UNSUBSCRIBE, email to [email protected] > with a subject of "unsubscribe". Trouble? Contact [email protected] > Archive: http://lists.debian.org/[email protected] > > -- "Al juntarme dia tras dia con los Listeros, mi capacidad intelectual crece en proporcion inversa a la ignorancia generada. Gracias Linuxeros" -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/cal0xakdr6m+3hgjagaihdb09n7h9rpltvggt9+cazy6vr7e...@mail.gmail.com

