このawkコマンドを復号化するのに役立ちます

このawkコマンドを復号化するのに役立ちます

私はawkの本を勉強していますが、この例を得ましたが、何が起こっているのかについての実際の説明はありません。

awk ' NR%2 {printf "%s,", $0; next;}1 ' < linepairs.csv

コンテキスト linepairs.csv は、複数の csv 値を持つ行を含むファイルです。

a,b,c,d
e,f,g,h
i,j,k,l

など...

この awk コマンドは行を一緒にリンクする必要があります。私はそれらが同じだNR%2と思って変更を試みましたが、(NR%2==0)反対の結果を得ました。私はprintfがどのように動作するのか理解していて、「次へ」について学んだが、そこで正確に何が起こっているのかわかりません。最後に、最後の1は以前に本で言及されていなかったので、私を本当に混乱させました。

誰かが私のためにこの命令を翻訳してくれたらいいでしょう。

ベストアンサー1

Awkプログラムはルールで構成されていますpattern {action}。評価結果がTRUE{action}の場合に実行されます。patternawkのTRUEは次のように表示されます。いいえ- 値が0です。したがって、次のようNR%2になります。NR%2 != 0

pattern {action}どちらも省略できます。

  • pattern存在しない場合は、{action}すべてのレコードに適用されます。

  • 存在しない場合、デフォルトの{action}操作は次のとおりです。{print}

このモードは、各レコードに対してデフォルト操作が呼び出される1ように、「常にtrue」モードで頻繁に使用されます。{print}

ルールは左から右に読みます。このnextステートメントは、残りのルールをスキップするために使用されます。

だからawk ' NR%2 {printf "%s,", $0; next;}1 ' < linepairs.csv実行してください

  • printf "%s,", $0評価結果がゼロでない場合は、NR%2モード1とその基本{print}操作をスキップします。

そして

  • {print}そうでなければ

おすすめ記事