AWKにファイルを処理させ、一部の行のみを変更したい。ただし、ルールが一致する行のみを出力します。/*/ {print $0}
そこで、ルールを追加しました。しかし、それから私は重複を持っています。
awk '/rule 1/ {actions 1;} /*/ {print $0}' file.txt
'rule 1'行を変更して、出力のすべての行が必要です。
AWKにファイルを処理させ、一部の行のみを変更したい。ただし、ルールが一致する行のみを出力します。/*/ {print $0}
そこで、ルールを追加しました。しかし、それから私は重複を持っています。
awk '/rule 1/ {actions 1;} /*/ {print $0}' file.txt
'rule 1'行を変更して、出力のすべての行が必要です。
スクリプトの最後にaを追加する1
と、強制awk
的にtrueが返されます。これは、デフォルトですべての行の印刷を有効にする効果があります。たとえば、次のようにすると、ファイル内のすべての行が出力されます。ただし、行に単語が含まれている場合は、rule 1
その行の最初のフィールドのみが印刷されます。
awk '/rule 1/ { print $1; next }1' file
この単語next
は、その特定の行の残りのコードの処理をスキップします。好きなアクションを適用できます。私はちょうどすることを選びましたprint $1
。HTH。
エド・ノートンの最新の説明に従って、大きな編集を行います。
Ed Mortonが指摘したように、次のように簡略化することもできます。特定のパターンで行を変更してから、すべての行を印刷する
awk'/ regex1 / {actions_1} 1'file.txt
(私が提案したものよりも好ましい理由については、以下の彼のコメントを参照してください)
レコードの場合、現在の行の残りの処理をスキップする方法があります。たとえば、:continue
またはループ内にある場合break
、またはnext
メインループ内にある場合などです。
例を参照してください:http ://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html#Next-Statement
または、アクション1の結果を$0に割り当てます。
awk '/rule 1/{$0=actions 1}1' file.txt
例えば:
awk '/rule 1/{$0=$1}1' file.txt