awk - 花括号后面的数字有什么作用?

标签 awk

为什么

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/

相关文章:

sorting - 如何使用 awk 按长度对行进行排序?

awk - 如何在awk中为每个循环执行命令?

regex - Ubuntu、Bash、awk、正则表达式 -> 在文本文件中找到所有 [numbers] 并打印它们

linux - 在 bash 的每一行中查找连续的空格分隔的单个字符

linux - 如何在 awk 模式搜索中包含 "["和 "]"

bash:模式 x 和 y 之间的单独行 block

linux - 比较两个文件并在匹配的单词后打印 N 行

linux - 要显示的 Shell 脚本 - 内存使用情况、磁盘使用情况和 CPU 负载?

linux - 获取两个特殊字符之间的字符串

linux - 使用 ls 和 grep 而不是 find 搜索目录和子目录以查找与字符串匹配的文件并列出路径