[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Comando awk



El día 26 de septiembre de 2011 23:59, Pablo Jiménez
<pejimene@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
>> <pejimene@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
>

Que hermoso es saber que hay otros caminos que no conocia.

Gracias

> Saludos.
>
> --
> Pablo Jiménez
>
>
> --
> To UNSUBSCRIBE, email to debian-user-spanish-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact
> listmaster@lists.debian.org
> Archive: 20110927045900.GA15151@example.net">http://lists.debian.org/20110927045900.GA15151@example.net
>
>



-- 
"Al juntarme dia tras dia con los Listeros, mi capacidad intelectual
crece en proporcion inversa a la ignorancia generada. Gracias
Linuxeros"


Reply to: