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

Re: Comando awk



El 27/09/11 08:20, fernando sainz escribió:
> El día 27 de septiembre de 2011 06: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
>>
>> 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
>>
>>
> 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.

-- 
"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"


Reply to: