awk '{for(x=1;$x;++x)print $x}' コマンドを理解するには?

awk '{for(x=1;$x;++x)print $x}' コマンドを理解するには?

私はこのコマンドを知っています

awk '{for(x=1;$x;++x)print $x}' 

行のすべての列を印刷します。

これが2に++x 変わり、最初に印刷されませんか?私が理解したところによると、x$2https://stackoverflow.com/questions/1812990/incrementing-in-c-when-to-use-x-or-x

$x機能は何ですかfor(x=1;$x;++x)

ベストアンサー1

いいえ。これはfor(i=0;i<10;i++)古典的なプログラミング構造です(参照:伝統的なforループ)はさまざまな言語で存在します。これは次のように分類できます。

start-expression; end-condition; end-of-iteration-expression

つまり、上で書いたのは「iを0に初期化し、iが10より小さいときに何かをしてから、それからiに1を加えます。はい、構文は混乱しています。しかし、それがすべてです。end-of-iteration-expression++xこの場合)各ループが終わるたびに1回。次のように書くのと同じです。

while(i<10){print i; ++i}

については、$xその数字のフィールドが存在し、その内容がfalseと評価されていないことを確認するだけです(Mathiasの説明どおり)。次のことに答えてください。)。$Nフィールド番号Nが存在し、N型ではない場合はtrueを返しますfalse。たとえば、

$ echo "a b c d" | awk '($4){print "yes"}'
yes
$ echo "a b c d" | awk '($14){print "yes"}' ## prints nothing, no $14
$ echo "a b c 0" | awk '($4){print "yes"}' ## prints nothing, $4 is 0

上記のように、最初のコマンドはyes1つあるため印刷されます$4$142番目のコマンドはないので、何も印刷しません。その後、元の例に戻ります。

awk '{for(x=1;$x;x++)print $x}' 
          ___ __ ___
           |   |  |
           |   |  |-----> increment x by 1 at the end of each loop.
           |   |--------> run the loop as long as there is a field number x
           |------------> initialize x to 1

おすすめ記事