私は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}
の場合に実行されます。pattern
awkの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}
そうでなければ