この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コマンドに変数を入れる方法がわかりません。

また、(日付)が1桁の場合と2桁の場合の間に余分な$(NF-5)スペースを追加したいと思います。$(NF-3)$(NF-3)

これを行うための最良の方法は何ですか?

答え1

タイムゾーンの場合は、if2つの可能な値を確認したいので、 - ステートメントを追加することをお勧めします。

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

zone次に、上記で定義した変数を印刷します。 ( print zone)

printifステートメントを/コマンドに直接入れることはできませんが、->printfのように変更が1つしかない場合は、次のように動作します。+0000GMT

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)
}'

関連情報