如何格式化这个 awk 命令?

如何格式化这个 awk 命令?
$ echo "$(lastlog | grep $USER | awk '{print $(NF-5)" "$(NF-3)" "$(NF-4)" "$(NF-2)" "$(NF-1)" "$(NF-0)}')"
Thu 7 Sep 05:56:35 +0100 2023

我想用or替换该+0100位,如果该值是(我知道这个输出可能取决于区域设置)。BSTGMT+0000

$(NF-1)我确实测试了有条件设置变量的值,但我不知道如何将变量放入 awk print 命令中。

我还想在(日期)是单个数字时在$(NF-5)和之间添加额外的空格,但在它是两位数时则不添加空格。$(NF-3)$(NF-3)

如何最好地做到这一点?

答案1

对于时区,我建议添加一个if- 语句,因为您想检查两个可能的值:

if($(NF-1)=="+0000") {zone="GMT"}
else if ($(NF-1)=="+0100") {zone="BST"}
else {zone=$(NF-1)}

然后打印zone上面定义的变量。 ( print zone)

if 语句不能直接放入print/printf命令中,而如果您只有一个更改,例如+0000->GMT这将起作用:

print $(NF-1)=="+0000"?"GMT":$(NF-1)

对于空间填充$(NF-3),声音方式是使用printf

printf "%2s",$(NF-3)

总之:

awk '{
    if($(NF-1)=="+0000") {zone="GMT"}
    else if ($(NF-1)=="+0100") {zone="BST"}
    else {zone=$(NF-1)}

    printf "%s %2s %s %s %s %s",$(NF-5),$(NF-3),$(NF-4),$(NF-2),zone,$(NF-0)
}'

相关内容