Linux命令学习手册-awk


awk '条件类型1{动作1} 条件类型2{动作2} ...' filename相较于
sed 常常作用于一整个行的处理,
awk 则比较倾向于一行当中分成数个『字段』来处理。读入第一行,并将第一行的资料填入 $0, $1, $2…. 等变数当中;依据 “条件类型” 的限制,判断是否需要进行后面的 “动作”;做完所有的动作与条件类型;若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。经过这样的步骤,您会晓得, awk 是『以行为一次处理的单位』, 而『以字段为最小的处理单位』。
NF 每一行 (
$0 ) 拥有的字段总数
NR 目前 awk 所处理的是『第几行』数据
FS 目前的分隔字符,预设是空格键 每一行的每个字段的变量名称就是
$1,
$2 … 等。还有个例外,那就是
$0 代表一整行的意思。注意,
awk 后续的所有动作以 ‘ 括住, 所以,内容如果想要以
print 打印时,记得,非变量的文字部分,
printf 提到的格式中,都需要使用双引号.大于
= 大于或等于
== 等于 != 不等于 打印每行的第1列和第三列,并且用[TAB]隔开输入输出如下这里,我们没有设定条件,也就是无论哪一行都做同样处理,所以第2,3行显示的有点”不正常”。由此可知awk是“迭代”处理每一行的。列出每一行的账号,目前处理的行数, 以及该行有多少字段输入输出如下查阅
/etc/passwd ,第3栏小于 1开发云主机域名0 以下的数据,并且仅列出账号与第3栏输入输出如下:这里,在
/etc/passwd 当中是以冒号 “:” 来作为字段的分隔,所以需要设置一下。但是我们读入第一行的时候, 那些变数 $1, $2… 预设还以空格键为分隔,所以虽然我们定义了 FS=”:” 了, 但是却仅能在第二行后才开始生效(可能因为一般第一行仅仅是列名不需处理,而这里却是特例,见例4改进)。对上面过滤的操作改进输入输出如下:利用 BEGIN 这个关键词,可以从第一行就生效了。实际除了BEGIN,还有END。计算每一行总额,添加追加到最后一列输入输出如下:注意:所有的动作在
{} 内,如需多个指令辅助,可利用分号
; 间隔或直接以
[Enter] 按键来隔开每个指令,例如上面的 NR>=2 后面接的动作, 利用 total = … 那个指令来指定加总,而后续则以
printf 来格式化输;格式化输出时,在
printf 的格式设定当中,务必加上
n ,才能进行分行;与
bash shell 的变量不同,在
awk 当中,变量可以直接使用,不需加上
$ 符号(如total)。参考资料:
《鸟哥的私房菜》

相关推荐: 用SAN还是NAS?我来告诉你

存储区域网络(SAN)是以一种结构连接的存储,通常通过交换机连接,使许多不同的服务器能够轻松访问存储设备。从服务器应用程序和操作系统的角度来看,访问SAN中的数据存储或直接连接的存储之间没有明显区别。存储区域网络(SAN)与直接连接存储(DAS)一样,可以对数…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/16 09:20
下一篇 03/16 09:20

相关推荐