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