if 및 z 옵션과 함께 awk 사용

if 및 z 옵션과 함께 awk 사용

반환 값이 정수인지 확인하려는 경우 bash 스크립트에서 이것을 사용합니다.

  if [ -z "$value" ]
    then
    echo 0
    else
    echo $value
  fi

zawk에서 if 옵션을 사용 하려고합니다 . 예를 들어 다음 줄이 있습니다.

PRIMARY SECONDARY CONNECTED 350 800  

나는 이것을 사용하려고합니다 :

/bin/awk '{if( -z $1){print "0"}else{print $1}}' script  

내가 or 또는 or $1로 바꾸 더라도 항상 반환됩니다 . 내가 awk를 잘못된 방식으로 사용하고 있는 걸까요?$2$3$4$50

답변1

다른 사람들이 말했듯 이 에는 -z테스트가 awk없으며 -z셸의 테스트는 정수가 아닌 빈 문자열에 대한 테스트입니다.

변수가 비어 있는지 테스트하려면 다음을 수행 할 awk수 있습니다. 비어 있으면 0을 인쇄하고, 그렇지 않으면 해당 값을 인쇄합니다.

if (value == "")
    print 0
else
    print value

또는,

print (value == "" ? 0 : value)

예를 들어:

$ awk -F '\t' '{ print ($1 == "" ? 0 : $1) }' file

입력에서 탭으로 구분된 첫 번째 값이 비어 있는 줄에 대해 0을 인쇄하고, 그렇지 않으면 실제 값을 인쇄합니다.

관련성이 있을 수 있습니다(에서 변수 유형을 찾으려는 경우 awk).

답변2

-z쉘은 "값이 정수인지 여부"를 알려주지 않고 길이가 0보다 큰지 여부를 알려줍니다.

awk에서도 같은 일을 할 수 있습니다 length-if(length($1)) ...

변수나 필드가 숫자인지 확인하려면 awk다음을 수행하세요.

 if($1+0 || $1~/^[+-]?0/) ...

표현식 if(-z $1)은 단순히 설정되지 않은 변수를 무효화하고 z필드 에 추가되어 항상 TRUE로 처리되는 비어 있지 않은 문자열을 생성 합니다 0.0$1~ 일지라도 $1빈 문자열 ""또는 숫자 입니다 0.

답변3

노력하다

/bin/awk '{if( x$1 == x){print "0"}else{print $1}}' script  

-zawk에는 옵션이 없습니다.

관련 정보