1

我希望 AWK 处理我的文件,并且只更改一些行。但它只打印规则匹配的行。所以我添加了一条/*/ {print $0}规则。但后来我有一个重复。

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

我希望输出中的所有行都更改了“规则 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 Norton 的最新解释,我将做一个大的编辑。

  • 正如 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 回答