Ayuda cshell

R3DKNIF3

Hola! estoy intentando modificar el campo de un fichero, pero no se como hacer la salida.

Estoy intentando hacerlo x awk porque el fichero es largo y solo kiero modificar los campos d las lineas que cumplen lasc condiciones:

cat vuelos | awk -F: 'BEGIN {a = 0} $1 == j {if (($14 > 0) && (a == 0)) $14 = $14 - 1; print $14; a=1}' j=$vuelo

vuelo es una entrada por terminal y vuelos es el fichero

Como puedo hacer para que el resultado en cada bucle m modifique el campo $14?

Si alguien m pudiese ayudar o darme otra idea le estaria muy agradecido, gracias!

LOc0

No entiendo bien qué quieres hacer. Tal y como está

cat vuelos | awk -F: 'BEGIN {a = 0} $1 == j {if (($14 > 0) && (a == 0)) $14 = $14 - 1; print $14; a=1}' j=$vuelo

En la primera línea pone la variable 'a' a cero. Después comprueba que el primer campo de la línea sea igual a 'j' y si es así y además el campo 14 es mayor que cero y 'a' vale cero entonces le resta 1 al campo 14. Después imprime el campo 14 y pone 'a' a uno. Lo de j=$vuelo no lo pillo...

Repito que no sé qué pretendes, pero si tú intención es leer línea a línea un fichero y si cierto campo cumple algo que te modifique otro/s campos, deberías hacer algo así (supongamos un fichero de 6 campos separados por ':'):

cat fichero | awk -F: '{a="hola"; print a":"$2":"a":"$4":"a":"$6}' > fichero_modificado

Esto te crearía un fichero modificado con los campos IMPARES cambiados por la cadena "hola".

Salu2 ;)

R3DKNIF3

mira t explico

tengo un fichero vuelos donde salen diferentes campos

num vuelo: ______________________ :plazas:_______________-

j=$vuelo es para que me entre al awk el dato del vuelo que entra por la terminal

m piden que compruebe los vuelos y si hay plazas libres y si las hay que modifique las plazas restandole 1 al campo $14 que es el d las plazas

Con lo cual el a es por si hay varios vuelos con el mismo numero de vuelo pero con diferentes plazas que no reste 1 a todos esos vuelos sino al primeor que coja, ya que solo es 1 pasajero

Lo que quiero es modificar el mismo fichero vuelos que entro al awk no crear otro nuevo

No se si m he explicado bien xD

Gracias por contestar!

LOc0

CREO que sería algo así:

awk -F: 'BEGIN {a=0} {getline num_vuelo < "-"; if($1==num_vuelo && $14 > 0 && a == 0){a=1; $14--; print > FILENAME}}' vuelos

Esto primero inicializa 'a'. Luego por cada línea del fichero vuelos, lee del terminal el número de vuelo y lo compara con el primer campo de la línea leida del fichero. Si coincide, siendo el campo 14 mayor que cero y además 'a' vale cero pues actualiza el campo 14 restándole 1.

Más info http://club.telepolis.com/jagar1/Unix/Awk.htm

Salu2 ;)

PD: Haz un backup del fichero vuelos antes de probar nada no se te vaya a borrar.

Usuarios habituales

  • LOc0
  • R3DKNIF3