awk脚本结尾的1是什么意思


Answers:


24

一个awk程序是一系列条件-动作对,条件是大括号和行动以外被包封在其中。如果条件的值为零或为空字符串,则条件为假;其他条件为真(根据上下文,未初始化的变量为零或空字符串,因此它们为false)。可以暗示一个条件或一个动作;无条件的括号(随着您的开始)被认为具有真实的条件,并且在被击中时始终执行,并且只有在满足条件的情况下,任何不执行任何操作的条件才会打印该行。

1在脚本的末尾是一个条件(总是如此),没有动作,所以它执行的每一行的默认操作,打印线(可能已在括号前面的动作修改)。


7

我真的不喜欢这些类型的快捷方式,因为它混淆并误导了它的解析方式。当您阅读类似的内容时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}
'

5

1 表示打印每一行。

awk语句与编写相同:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.