awk NR%2 {} 1の意味

3
2022.01.10

私はこのコードを理解しようとしています:

 awk 'NR%2{printf "%s ",$0;next;}1' yourFile

今、私はそれをカスタマイズしようとします。

このerror.txtコンテンツを考えると:

 KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1

それで:

 awk 'NR%2{printf NR "%s ", $0; next}1' error.txt

... 戻ります:

 1KEY 4048:1736 string 3
3KEY 0:1772 string 1
5KEY 4192:1349 string 1
7KEY 7329:2407 string 2
9KEY 0:1774 string 1

NR%2は偶数の行番号を参照していると思いますが、1が何を参照しているかはわかりません。
1がなければ、awk 'NR%2{printf NR "%s ", $0; next}' error.txtは、1行が返されます。

 1KEY 4048:1736 string 3KEY 0:1772 string 5KEY 4192:1349 string 7KEY 7329:2407 string 9KEY 0:1774 string 

全体的に、私はまだそれを取得していません。

私はこれまでこれらのページを見てきました:

回答
9
2022.01.10

その%は、2つ以上の数値の剰余除算を求める剰余/剰余算術演算子です。 awkではNRは続くアクションが実行されず、therforeでも、レコード番号の0との結果とその0が偽の結果であること、2により、その部門は、それが条件文として書かれている現在のレコード数を表します。

最後に1を実行すると、常に真の条件として知られるイディオムが実行され、前の行の最後に偶数行番号が出力され( NR%2結果が0の場合は常に実行されます)、改行なしでprintfが出力されます。 awkスクリプトの最後にある「1」の意味を参照してください。