반환 값이 정수인지 확인하려는 경우 bash 스크립트에서 이것을 사용합니다.
if [ -z "$value" ]
then
echo 0
else
echo $value
fi
z
awk에서 if 옵션을 사용 하려고합니다 . 예를 들어 다음 줄이 있습니다.
PRIMARY SECONDARY CONNECTED 350 800
나는 이것을 사용하려고합니다 :
/bin/awk '{if( -z $1){print "0"}else{print $1}}' script
내가 or 또는 or $1
로 바꾸 더라도 항상 반환됩니다 . 내가 awk를 잘못된 방식으로 사용하고 있는 걸까요?$2
$3
$4
$5
0
답변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
-z
awk에는 옵션이 없습니다.