如何强制AWK停止应用规则?

时间:2013-02-15 10:38:09

标签: awk

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

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

我想要输出中的所有行,并更改“规则1”行。

3 个答案:

答案 0 :(得分:3)

在脚本末尾添加1,强制awk返回true,这样可以默认启用所有行的打印。例如,以下内容将打印文件中的所有行。但是,如果该行包含单词rule 1,则只会打印该行的第一个字段。

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

单词next跳过处理该特定行的其余代码。您可以应用您想要的任何动作。我刚刚选择print $1。 HTH。

答案 1 :(得分:1)

按照Ed Norton的最新解释,我会做一个很大的编辑。

  • 正如Ed Morton指出的那样,它甚至可以简化为:更改具有特定图案的线条,然后打印所有线条

    awk'/ regex1 / {actions_1} 1'file.txt

    (请参阅下面的评论,说明为什么它比我提议的更好)

  • 对于记录,存在跳过当前行的其余处理的方法,例如:continuebreak(如果它在循环中)或{{1如果它在主循环中。

例如参见:http://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html#Next-Statement

答案 2 :(得分:0)

或者将操作1的结果分配给$ 0:

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

例如:

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