1

AWKにファイルを処理させ、一部の行のみを変更したい。ただし、ルールが一致する行のみを出力します。/*/ {print $0}そこで、ルールを追加しました。しかし、それから私は重複を持っています。

awk '/rule 1/ {actions 1;} /*/ {print $0}' file.txt

'rule 1'行を変更して、出力のすべての行が必要です。

4

3 に答える 3

3

スクリプトの最後にaを追加する1と、強制awk的にtrueが返されます。これは、デフォルトですべての行の印刷を有効にする効果があります。たとえば、次のようにすると、ファイル内のすべての行が出力されます。ただし、行に単語が含まれている場合は、rule 1その行の最初のフィールドのみが印刷されます。

awk '/rule 1/ { print $1; next }1' file

この単語nextは、その特定の行の残りのコードの処理をスキップします。好きなアクションを適用できます。私はちょうどすることを選びましたprint $1。HTH。

于 2013-02-15T10:49:14.290 に答える
1

エド・ノートンの最新の説明に従って、大きな編集を行います。

  • 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

于 2013-02-15T10:43:27.583 に答える
0

または、アクション1の結果を$0に割り当てます。

awk '/rule 1/{$0=actions 1}1' file.txt

例えば:

awk '/rule 1/{$0=$1}1' file.txt
于 2013-02-15T10:55:33.733 に答える