AWK 向一系列参数添加条件

AWK adding a condition to a series of arguments

我有以下名为 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       
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

我已使用以下命令重新配置文件:

awk 'BEGIN{FS=OFS="\t"} NR>1 {split(,a,"/") ; print (a[3]"-"a[2]"-"a[1]"\t""\t""\t""\t""\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

我正在尝试在文件后面为第二列中大于零 $2 > 0 的行添加“vi”。输出应如下所示(请注意末尾的 vi):

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

如何更改上述命令以获得所需的结果?

我试过:

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

它没有给出正确的输出。如何将此条件添加到现有命令中?

你可以使用这个 awk:

awk '
BEGIN{FS=OFS="\t"}
NR > 1 {
   split(,a,"/")
   print a[3]"-"a[2]"-"a[1], , , , , "az" ( > 0 ? OFS "vi" : "")
}' file

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
2021-03-31  46.00   Becta Ltd   Taylormallon    Lawns   az  vi

要获得表格输出,请使用:

awk 'BEGIN{FS=OFS="\t"} NR>1 {split(,a,"/"); print a[3]"-"a[2]"-"a[1], , , , , "az" ( > 0 ? OFS "vi" : "")}' file | column -s $'\t' -t

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
2021-03-31  46.00    Becta Ltd          Taylormallon  Lawns     az  vi

</code> 大于零时,我们使用 <code>( > 0 ? OFS "vi" : "") 附加制表符和 vi