我希望AWK处理我的文件,并只更改一些行。但它只打印规则匹配的行。所以我添加了/*/ {print $0}
规则。但后来我有了重复。
awk '/rule 1/ {actions 1;} /*/ {print $0}' file.txt
我想要输出中的所有行,并更改“规则1”行。
答案 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
(请参阅下面的评论,说明为什么它比我提议的更好)
对于记录,存在跳过当前行的其余处理的方法,例如:continue
或break
(如果它在循环中)或{{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