私はこのコマンドを知っています
awk '{for(x=1;$x;++x)print $x}'
行のすべての列を印刷します。
これが2に++x
変わり、最初に印刷されませんか?私が理解したところによると、x
$2
https://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
上記のように、最初のコマンドはyes
1つあるため印刷されます$4
。$14
2番目のコマンドはないので、何も印刷しません。その後、元の例に戻ります。
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