Re: Comando awk
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
Reply to: