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?
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 comandoprint
. 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”.