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シェルは、「値が整数かどうか」を知らず、長さがゼロより大きいかどうかを示します。

awkでも同じことができますlength-if(length($1)) ...

変数またはフィールドが数値であることを確認するには、awk次の手順を実行します。

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

if(-z $1)は単純に設定されていない変数を無効にし、zフィールドに追加され、常にTRUEとして扱われる空でない文字列を生成します00$1〜でも $1空の文字列""または数値です0

答え3

努力する

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

-zawkにはオプションはありません。

関連情報