感谢支持
我们一直在努力

AWK原理及命令和文件输入

一,awk简介
 1,
 awk是3个姓氏的首字母,代表该语言的3个作者,awk的版本有很多,包括:旧版awk,新版awk(nawk),GNU awk(gawk)等。
 awk程序有awk命令,括在引号或写在文件中的指令以及输入文件这几个部分组成。
 2,
 [root@rhel helinbash]# which awk
 /bin/awk
 [root@rhel helinbash]# which gawk
 /bin/gawk
 [root@rhel helinbash]# ls -l /bin/awk /bin/gawk
 lrwxrwxrwx 1 root root      4 Oct 10  2013 /bin/awk -> gawk
 -rwxr-xr-x 1 root root 320416 Jan 15  2007 /bin/gawk
 [root@rhel helinbash]#
注:以后的例子都是采用gawk命令

AWK简介及使用实例 http://www.linuxidc.com/Linux/2013-12/93519.htm

AWK 简介和例子 http://www.linuxidc.com/Linux/2012-12/75441.htm

Shell脚本之AWK文本编辑器语法 http://www.linuxidc.com/Linux/2013-11/92787.htm

正则表达式中AWK的学习和使用 http://www.linuxidc.com/Linux/2013-10/91892.htm

文本数据处理之AWK 图解 http://www.linuxidc.com/Linux/2013-09/89589.htm

二,awk工作原理
 1,
 以下内容的names文件名举例按步骤解析awk的处理过程
 (1)
 vim names
 Tom Savage 100
 Molly Lee 200
 John Doe 300
 (2)
 [root@rhel helinbash]# cat names.txt | cut -d  ‘ ‘ -f 2
 

Savage
        Lee
 

[root@rhel helinbash]# cat names.txt | cut -d  ‘\t’ -f 2 
 cut: the delimiter must be a single character
 Try `cut –help’ for more information.
 [root@rhel helinbash]#
(3)
 [root@rhel helinbash]# gawk ‘{ print $1,$3 }’ names.txt
 
 
 Tom 100
 Molly 200
 John 300
 
 [root@rhel helinbash]#

[root@rhel helinbash]# gawk ‘{ print $1        $3 }’ names.txt 
 

Tom100
 Molly200
 John300
 
[root@rhel helinbash]#

2,
 原理图
 FS:Field separator(分隔符)
 OFS:Output Field Separator

第三步:awk中print命令打印字段;{print $1,$3} 只取有用的第一段和第三段;在打印时$1和$3之间由空格间隔。“,”逗号是一个映射到内部的输出字段分隔符(OFS),OFS变量
 缺省为空格,逗号在输出时被空格替换。接下来,awk处理下一行数据,直到所有的行处理完。

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-05/102520p2.htm

三,从文件输入
 1,
 格式:
 gawk  ‘/匹配字符串/’
 gawk  ‘{处理动作}’
 gawk  ‘/ 匹配字符串/ {处理动作}’ 文件名
 2,
 [root@rhel helinbash]# gawk ‘/root/’ /etc/passwd
 root:x:0:0:root:/root:/bin/bash
 operator:x:11:0:operator:/root:/sbin/nologin
 [root@rhel helinbash]# grep root /etc/passwd
 root:x:0:0:root:/root:/bin/bash
 operator:x:11:0:operator:/root:/sbin/nologin
 [root@rhel helinbash]#
3,
 [root@rhel helinbash]# gawk ‘/^root/’ /etc/passwd
 root:x:0:0:root:/root:/bin/bash
 [root@rhel helinbash]#
4,
 [root@rhel helinbash]# gawk ‘/^root/’
 root
 root
 root
 root
 studnet
 t^H^[[3~^H^H^H this is a demo string wih^H^H iclcude root key woard
 
root hello abc
 root hello abc
 
[root@rhel helinbash]#
注:红色的字体是过滤后的输出,这个是gawk的交互式执行命令
 5,
 [root@rhel helinbash]# gawk -F: ‘{ print $1 $3 }’ /etc/passwd
 root0
 bin1
 daemon2
 adm3
 lp4
 sync5
 shutdown6
 halt7
 mail8
 news9
 uucp10
 operator11
 games12
 gopher13
 ftp14
 nobody99
 nscd28
 vcsa69
 rpc32
 mailnull47
 smmsp51
 pcap77
 ntp38
 dbus81
 avahi70
 sshd74
 rpcuser29
 nfsnobody65534
 haldaemon68
 avahi-autoipd100
 xfs43
 gdm42
 sabayon86
 Oracle500
 named25
 [root@rhel helinbash]#
6,
 [root@rhel helinbash]# gawk -F: ‘/root/{ print $1 $3 }’ /etc/passwd 
 root0
 operator11
 [root@rhel helinbash]#
7,
 格式化输出print函数
 awk命令操作处理部分是放在“{}”(括号)中;print函数将变量和字符夹杂着输出。 如同linux中的echo命令
 二,从命令输入
 1,
 awk还可以处理通过管道接收到的linux命令的结果,shell程序通常使用awk做深处理。
 (1)
 格式:
 命令| gawk ‘/匹配字符串/’
 命令| gawk ‘{处理动作}’
 命令| gawk ‘/匹配字符串/ {处理动作}’
 (2)
 [root@rhel helinbash]# date
 Mon May 26 10:10:01 CST 2014
 [root@rhel helinbash]# date | gawk ‘{print “Month:”$2″\nYear:”,$6 }’
Month:May
 Year: 2014
 [root@rhel helinbash]#
(3)注意上面的例子,一种是直接在Month后连接$2,另一种是在Year和$6之间使用了逗号,都由OFS决定。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-05/102520.htm

赞(0) 打赏
转载请注明出处:服务器评测 » AWK原理及命令和文件输入
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏