为什么
echo foo bar..baz bork | awk 'BEGIN{RS=".."} {gsub(OFS,"\t");}1'
似乎做同样的事情
echo foo bar..baz bork | awk 'BEGIN{RS=".."} {gsub(OFS,"\t");} {print;}'
?
事实上,任何不为零的数字(包括小数和负数)都会做同样的事情。但是,省略数字、使用文本字符或使用零不会打印任何内容。我没有在任何地方看到这个记录,尽管我可能错过了一些东西。
最佳答案
如果你还记得,awk
是一种语言,它有一系列 <pattern> <action>
操作。每个模式都针对每一行进行评估(至少在概念上),当模式匹配时,执行操作。可以省略模式或操作。省略的模式匹配每一行;省略的操作默认为 {print $0}
(又名 {print}
)。 “模式”可能是一个简单的正则表达式匹配,或者其他一些更复杂和更通用的条件,如果要执行操作,则必须评估为真(如 Ed Morton 在他的 comment 中所述)。
在您的示例中, 1
是一种模式;它评估为真。未指定 Action ,因此调用默认 Action ,即 {print}
或 {print $0}
.除零或空字符串以外的任何值都会评估为真并将调用打印。 (请注意,如果您提到一个未初始化的变量(例如, c
),那么它会自动创建并设置为零,因此计算结果为 false。因此 awk 'c' <<<"Hi"
不打印任何内容。)
当然,与 BEGIN 和 END 模式相关的 Action 是专门处理的。
关于awk - 花括号后面的数字有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643240/