awk 脚本末尾的“1”是什么意思

awk 脚本末尾的“1”是什么意思

我正在读这个awk剧本

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

我想知道1它最后的作用是什么。

答案1

程序awk是一系列条件-动作对,条件位于大括号之外,动作包含在大括号内。如果条件的计算结果为零或空字符串,则该条件被视为 false,其他任何值都为 true(未初始化的变量为零或空字符串,具体取决于上下文,因此它们为 false)。可以暗示条件或动作;没有条件的大括号(如您的开始)被认为具有真实条件,并且在被击中时始终执行,并且当且仅当满足条件时,任何没有操作的条件才会打印该行。

脚本末尾1的 是一个没有任何操作的条件(始终为真),因此它对每一行执行默认操作,打印该行(可能已被大括号中的上一个操作修改)。

答案2

我真的不喜欢这些类型的快捷方式,因为它混淆并误导了它的解析方式。当您读到类似的内容时awk -F"=" '{OFS="=";gsub(",",";",$2)}1',您可能会认为正在1修改前面的语句。或者您可能认为1是 的别名{print},这在技术上是不正确的。

实际上,1是一个完全独立的声明。您可以像这样分隔语句:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

每个 awk 语句的格式都是condition {action}.如果没有{action}给定,则默认操作是{print}。 (如果没有condition给定,则默认条件true。)

所以这里1是条件,true由于它不为零,因此它的计算结果始终为 。被省略,因此执行action默认值。{print}你可以这样想:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

答案3

1意思是打印每一行。

awk 语句与编写相同:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'

相关内容