AWKがこの条件文にエラーを表示するのはなぜですか?

AWKがこの条件文にエラーを表示するのはなぜですか?

2番目のawk onelinerでは、単に<forを切り替えましたが、>構文エラーが発生しました。>条件文には許可されていませんか?

~/Desktop $ awk 'BEGIN{print 3<5 ? "Hello":"World"}'
Hello
~/Desktop $ 
~/Desktop $ awk 'BEGIN{print 3>5 ? "hello": "world"}'
awk: cmd. line:1: BEGIN{print 3>5 ? "hello": "world"}
awk: cmd. line:1:                 ^ syntax error
~/Desktop $
~/Desktop $ awk 'BEGIN{print 5<3 ? "Hello":"World"}'
World
~/Desktop $
~/Desktop $

ベストアンサー1

printステートメントは3つの形式のうちの1つを取りますawk

  • print > expression
  • print >> expression
  • print | expression

...ここで>>>および次のビットはオプションです|expression

このコマンドを使用すると、計算結果の文字列で指定されたファイルprint > expressionに出力が移動されます。expressionファイルが存在する場合は切り捨てられます(空になります)。これは、シェルで出力リダイレクトがどのように機能するかと同じように機能しますが、print同じステートメントを2回実行すると、最初に関連するファイルをclose(expression)閉じるために使用されない限り、ファイルは切り捨てられません。expression

コマンドとフォーマットも>>シェルがこれらのトークンを処理する方法に触発されましたが、これらのフォーマットの詳細についてはドキュメントを参照してください。|printawk

あなたのコードに

print 3 > 5 ? "Hello" : "World"

これは構文と一致するため、というprint > expression文字列を出力します。行の残りの部分には理解できない疑問符が表示され続けているため、これについて文句を言います。いくつかの実装では、このビットを35awkawk5 ? "Hello" : "World"expression3Hello5本物ブール値として使用される場合の値)。

あなたが一番したいことは

print ( 3 > 5 ? "Hello" : "World" )

または

print ( 3 > 5 ) ? "Hello" : "World"

これによりprint > expression構文がトリガーされません。

おすすめ記事