0

この awk コマンドは、各行に対して 'stuff 1' を実行し、最初の行に対してのみ 'stuff 2' を実行し、最初の行以外の行に対して 'stuff 3' を実行します。

awk '{ { Do stuff 1 } if(NR==1) { Do stuff 2 } else { Do stuff 3 } }'

上記に基づいて、以下は行ごとに「stuff 1」を実行し、行が最初の行でない場合は「stuff 2」を実行し、すべての行 (最初を含む) に対して「stuff 3」を実行します正しい ??

awk '{ Do stuff 1 } NR!=1 { Do stuff 2 } { Do stuff 3 }'

それとも、NR!=1 の行だけに対して 'stuff 2' と 'stuff 3' が実行されますか??

4

2 に答える 2

1

5 行入力の場合:

ls -1 | awk '{ print "allways"; } NR!=1 { print NR"-"2; } { print NR"-"3 }'
allways
1-3
allways
2-2
2-3
allways
3-2
3-3
allways
4-2
4-3
allways
5-2
5-3

そのため、stuff3 は常に行われます (stuff1 とまったく同じです)。条件の影響を受けるのは stuff2 だけです。

于 2012-04-27T07:47:35.237 に答える
1

最初のものの外括弧に注意してください。すべての行で実行される単一のブロックがあり、すべての行で実行されるブロックと、に基づいて決定される条件が含まれていNRます。

2 番目のブロックには 3 つのブロックがあり、2 番目のブロックには、2 行目以降のみ実行するという条件があります。

于 2012-04-27T07:47:57.287 に答える