es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AWK añadiendo una condición a una serie de argumentos

Tengo el siguiente archivo llamado an.txt:

Bank Fee        Monthly A/C Fee                         -8.50   31/03/2021
Eft-Pos Rutherford & Bond       4835********    8848   C        210331123119    -250.00 31/03/2021<br>
Payment Avery Johnson   Avery Johnso    592315  Labour  -131.60 31/03/2021
Bill Payment    Collins Tf      127 Driver      Crescent        I1600   50.00   31/03/2021

He reconfigurado el archivo con el siguiente comando:

awk 'BEGIN{FS=OFS="\t"} NR>1 {split($7,a,"/") ; print (a[3]"-"a[2]"-"a[1]"\t"$6"\t"$2"\t"$3"\t"$4"\t""az")}' an.txt | head -n 4
2021-03-31  -8.50   Monthly A/C Fee         az
2021-03-31  -250.00 Rutherford & Bond   4835********    8848   C    az
2021-03-31  -131.60 Avery Johnson   Avery Johnso    592315  az
2021-03-31  50.00   Collins Tf  127 Driver  Crescent    az

Estoy tratando de agregar “vi” al final del archivo para las filas en la columna dos que sean mayores que cero $2 > 0. La salida debería verse así (ten en cuenta el “vi” al final):

2021-03-31  -8.50   Monthly A/C Fee         az
2021-03-31  -250.00 Rutherford & Bond   4835********    8848   C    az
2021-03-31  -131.60 Avery Johnson   Avery Johnso    592315  az
2021-03-31  50.00   Collins Tf  127 Driver  Crescent    az  vi

¿Cómo puedo cambiar el comando anterior para obtener el resultado deseado?

He intentado esto:

awk 'BEGIN{FS=OFS="\t"} NR>1 {split($7,a,"/") ; print (a[3]"-"a[2]"-"a[1]"\t"$6"\t"$2"\t"$3"\t"$4"\t""az")} $2>0{print "vi"}' an.txt | head -n 4

No está dando el resultado correcto. ¿Cómo puedo agregar esta condición al comando existente?

Tags:  

Answer

  1. Avatar for davy.ai

    Para agregar la condición de agregar “vi” al final de las filas en la columna dos mayores que cero, puedes usar una declaración if dentro del comando print. Intenta el siguiente comando:

    awk 'BEGIN{FS=OFS="\t"} NR>1 {split($7,a,"/") ; if ($2>0) print (a[3]"-"a[2]"-"a[1]"\t"$6"\t"$2"\t"$3"\t"$4"\taz\tvi"); else print (a[3]"-"a[2]"-"a[1]"\t"$6"\t"$2"\t"$3"\t"$4"\taz")}' an.txt | head -n 4

    Explicación:
    if ($2>0) verifica si la columna dos es mayor que cero y, si lo es, agrega “vi” al final de la fila.
    – La declaración else se usa para ejecutar si esta condición no se cumple, en cuyo caso solo imprime la salida original sin “vi”.

Comments are closed.