awk 문자열 비교가 작동하지 않습니다

awk 문자열 비교가 작동하지 않습니다

모든 라인을 출력으로 얻습니다. 다음 코드의 if 조건이 작동하지 않습니다.

grep -Ev '^(halt|sync|shutdown)' /etc/passwd | awk -F: '{\
    if("$7"!="$(which nologin)") \
        { print $0; } \
    }'

나는 다른 if 조건을 시도했습니다.

또한 모든 값을 반환합니다.

if("$1"!="usbmux") \
        { print $1; } \

그러나 $1에 usbmux 항목이 있더라도 아무것도 반환하지 않습니다.

if("$1"=="usbmux") \
        { print $1; } \

답변1

에서는 awk변수를 인용하지 마십시오.

awk -F : '$1 == "usbmux"'

이렇게 하면 첫 번째 :구분 필드가 정확히 string 인 모든 줄이 인쇄됩니다 usbmux. 조건과 연관된 명시적 작업이 없는 경우 기본 작업은 현재 레코드를 인쇄하는 것입니다(기본값은 행).

awk -F : -v string="$( command -v nologin )" '$7 == string'

그러면 7번째 :구분 기호 필드가 유틸리티 경로 인 모든 행이 인쇄됩니다 nologin. 이 awk변수는 명령줄의 출력 string으로 설정됩니다 .command -v nologin-v

awk -F : -v string="$( command -v nologin )" '$1 !~ /^(halt|sync|shutdown)$/ && $7 == string'

halt이는 위의 명령과 동일한 작업을 수행하지만 첫 번째 필드가 , 또는 (사용되지 않음 ) sync중 하나 인 행을 방지합니다 .shutdowngrep

대신 command -v nologin유틸리티에 대한 경로를 가져오곤 했습니다 . "nologinwhich" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?"왜.

관련 정보