AWK 重新排列文件以在现有列中创建新值

AWK rearranging file to create new values in existing column

我有以下名为 an.txt 的文件:

awk -F'\t' 'NR>1{print [=10=]}' an.txt | head -n 4

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"}' an.txt | head -n 4

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

我想实现的是剩下的一列($5)在一个命令中同时打印az。所以我尝试的是以下不成功的命令:

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

awk: cmd. line:1:                                                                                                 ^ syntax error

如何编写命令才能实现以下输出?

期望的输出:

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

最初尝试“现在我已经有了这种工作方式,我想让它变得更好”的解决方案有点不正确。

这是 Christian 写的(插入换行符和空格以提高清晰度):

$ 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

重要的部分是 print 语句,print() 函数的最后一个参数是

="az"

意图很明确——将字符串az分配给第五列。但是,这对 print 语句没有影响,因为它隐含地提前终止了 print 语句。

为了实现在每行末尾添加字符串 az 的既定目标,打印语句只需要打印它,而不是执行赋值。因此打印语句需要是

print a[3] "-" a[2] "-" a[1] "\t"  "\t"  "\t"  "\t"  "\t" az

我个人的偏好是将参数括在括号中以确保我们非常清楚它们是参数,所以我会写

print(a[3] "-" a[2] "-" a[1] "\t"  "\t"  "\t"  "\t"  "\t" az)