이 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)

printif 문을 / 명령 에 직접 넣을 수는 없지만 -> printf와 같이 변경 사항이 하나만 있는 경우에는 다음과 같이 작동합니다.+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)
}'

관련 정보