Linux三剑客之—AWK
来源:互联网 发布:gta5挽歌rh8改装数据 编辑:程序博客网 时间:2024/05/16 15:47
AWK工具是一种报表生成器,就是对文件进行格式化处理的工具,这里的格式化不是文件系统的格式化,而是对文件内容进行各种“排版”,进而格式化显示。
在Linux上我们使用的事GNU awk也就是gawk,awk文件其实就是gawk的软链接,所以awk和gwak是一样的。我们可以通过命令 man gawk
获得gawk的相关功能说明—gawk - pattern scanning and processing language (模式扫描及处理语言),gawk是一种过程式编程语言。gawk还支持条件判断、数组、循环等各种编程语言中所有可以使用的功能,因此我们还可以吧gawk成为一种脚本语言解释器。
awk的运行方式有3种:
(1)awk命令行
# awk
(2)awk程序文件
# awk -f /path/from/awk_script
(3)awk脚本
# !/bin/awk -f
awk的基本用法:
awk [OPTIONS] 'program' FILE1 FILE2...
其中program:PATTERN{ACTION STATEMENT}
program:编程语言
PATTERN:模式
ACTION STATEMENT:动作语句,可以是由多个语句组成,各语句间使用分号分隔
OPTIONS:
-F[]:指明输入字段分隔符
-v VAR_NAME=VALUE:变量赋值
-f /PATH/FROM/AWK_SCRIPT
awk在处理文本时也是一次读取一行文本,然后输入分隔符(默认为空格字符)进行切片,切成n个片段,然后将每一个片段都赋予awk内部的一个变量当中来进行保存,这些变量为
1. awk的输入命令:print
用法:print item1,item2,…
item:字符串,用引号引用
print "hello",awk"
变量:显示变量值,可以直接使用变了名进行引用;
print name
数值:无须加引号
要点:
(1)各 item 之间需要使用逗号分隔;而输出时的分隔符为默认的空白字符;
(2)输出的各 item 可以为字符串或数值、当前记录的字段($#)、变量或awk的表达式;数值会被转换为字符串进行输出;
(3)print 后面的 item 省略时,相当于运行“print $0”,用于输出整行;
(4)输出空白字符:print“ ”
2. 变量
变量分为內建变量和自定义变量
2.1 内置变量
FS: Input Field Seperator,输出字段分隔符默认为空白;
如:
awk -v FS=':' '{print \$1,FS,\$3}' /etc/passwd
RS:Input Record Seperator,输入时的行分隔符,默认分隔符;
如:
awk -v RS=' ' '{print }' /etc/passwd
OFS:Output Field Seperator,输出时字段分隔符,默认为空白字符
如:
awk -v FS=':' -v OFS=':' '{print \$1,\$3,\$7}' /etc/passwd
ORS:Output Record Seperator,输出记录分隔符,输出时用指定符号代替换行符
如:
awk -v RS=' ' -v ORS='###' '{print }' /etc/passwd
NF:number of field in current record,当前行字段数量
如:
awk -F: '{print NF}' /etc/fstab 引用内置变量不用\$awk -F: '{print $(NF-1)}' /etc/passwd`
NR:number of records,行数;命令后跟所有文件将统一合并计数;
如:
awk '{print NR}' /etc/fstab ; awk END'{print NR}' /etc/fstab
FNR:行数,各文件单独计数;
如:
awk '{print FNR}' /etc/fstab /etc/inittab
FILENAME:当前正在被awk读取的文件的文件名;
如:
awk '{print FILENAME}' /etc/fstab
ARGC:awk命令行中的参数个数;
如:
awk '{print ARGC}' /etc/fstab /etc/inittabawk 'BEGIN {print ARGC}' /etc/fstab /etc/inittab
ARGV:数组,保存了命令行参数本身;
ARGV[index]
ARGV[0],ARGV[1]
如:
awk 'BEGIN {print ARGV[0]}' /etc/fstab /etc/inittabawk 'BEGIN {print ARGV[1]}' /etc/fstab /etc/inittab
2.2 自定义变量
(1) -v VAR_NAME=VALUE 变量名区分字符大小写
如:awk -v test='hello gawk' '{print test}' /etc/fstab
(2)在program中自定义变量
如:awk 'BEGIN{test="hello,gawk";print test}'
3. awk的输出命令之二:printf格式化输出
语法:
printf FORMAT,item1,item2,...
要点:
(1)必须提供FORMAT
(2)与print语句不同,printf不会自动换行,需要显式指定换行符:\n
(3)FORMAT中需要分别为后面的每个item指定一个格式符,否则item无法显示;
格式符:都以%开头,后跟单个字符;
%c:显示字符的ASCII码;
%d,%i:显示为十进制整数;
%e,%E:科学计数法显示数值;
%f:显示为浮点数;
%g,%G:以科学计数法或浮点数格式显示数值;
%s:显示为字符串;
%u:显示无符号整数;
%%:显示%符号自身;
awk -F: '{printf "%s",$1}' /etc/passwd
[root@CentOS7 init.d]$awk -F: '{printf "%-20s %10d\n",$1,$3}' /etc/passwdroot 0bin 1daemon 2adm 3lp 4sync 5shutdown 6halt 7mail 8operator 11games 12ftp 14nobody 99systemd-bus-proxy 999systemd-network 192dbus 81polkitd 998abrt 173unbound 997tss 59libstoragemgmt 996rpc 32colord 995usbmuxd 113saslauth 994geoclue 993rtkit 172radvd 75rpcuser 29nfsnobody 65534qemu 107chrony 992setroubleshoot 991pulse 171gdm 42gnome-initial-setup 990sshd 74avahi 70postfix 89ntp 38tcpdump 72ghy 1000puppet 52apache 48
4. awk的操作符
算术操作符:
x+y, x-y, x*y, x/y, x^y, x%y
-x: 转换为负数
+x: 转换为数值
字符串操作符:没有符号的操作符,字符串连接
赋值操作符:
=, +=, -=, *=, /=, %=, ^=
++, –
比较操作符:
==, !=, >, >=, <, <=
模式匹配符: ~:左边是否和右边匹配包含 !~:是否不匹配
awk '$0~"^root"' /etc/passwd
逻辑操作符: 与&&,或||,非!
示例:
[root@CentOS7 init.d]$awk -F: '$3>=0 && $3<=1000 {print $1}' /etc/passwd rootbindaemonadmlpsyncshutdownhaltmailoperatorgamesftpnobodysystemd-bus-proxysystemd-networkdbuspolkitdabrtunboundtsslibstoragemgmtrpccolordusbmuxdsaslauthgeocluertkitradvdrpcuserqemuchronysetroubleshootpulsegdmgnome-initial-setupsshdavahipostfixntptcpdumpghypuppetapache
[root@CentOS7 init.d]$awk -F: '$3==0 || $3>=1000 {print $1}' /etc/passwdrootnfsnobodyghy
[root@CentOS7 init.d]$awk -F: '!($3==0) {print $1}' /etc/passwd bindaemonadmlpsyncshutdownhaltmailoperatorgamesftpnobodysystemd-bus-proxysystemd-networkdbuspolkitdabrtunboundtsslibstoragemgmtrpccolordusbmuxdsaslauthgeocluertkitradvdrpcusernfsnobodyqemuchronysetroubleshootpulsegdmgnome-initial-setupsshdavahipostfixntptcpdumpghypuppetapache
[root@CentOS7 init.d]$awk -F: '!($3>=500) {print $3}' /etc/passwd 0123456781112149919281173593211317275291071714274708938725248
函数调用: function_name(argu1, argu2, …)
条件表达式(三目表达式):
selector?if-true-expression:if-false-expression
示例:
[root@CentOS7 init.d]$awk -F: '{$3>=1000?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd root:Sysadmin or SysUser bin:Sysadmin or SysUser daemon:Sysadmin or SysUser adm:Sysadmin or SysUser lp:Sysadmin or SysUser sync:Sysadmin or SysUser shutdown:Sysadmin or SysUser halt:Sysadmin or SysUser mail:Sysadmin or SysUser operator:Sysadmin or SysUser games:Sysadmin or SysUser ftp:Sysadmin or SysUser nobody:Sysadmin or SysUsersystemd-bus-proxy:Sysadmin or SysUsersystemd-network:Sysadmin or SysUser dbus:Sysadmin or SysUser polkitd:Sysadmin or SysUser abrt:Sysadmin or SysUser unbound:Sysadmin or SysUser tss:Sysadmin or SysUser libstoragemgmt:Sysadmin or SysUser rpc:Sysadmin or SysUser colord:Sysadmin or SysUser usbmuxd:Sysadmin or SysUser saslauth:Sysadmin or SysUser geoclue:Sysadmin or SysUser rtkit:Sysadmin or SysUser radvd:Sysadmin or SysUser rpcuser:Sysadmin or SysUser nfsnobody:Common User qemu:Sysadmin or SysUser chrony:Sysadmin or SysUser setroubleshoot:Sysadmin or SysUser pulse:Sysadmin or SysUser gdm:Sysadmin or SysUsergnome-initial-setup:Sysadmin or SysUser sshd:Sysadmin or SysUser avahi:Sysadmin or SysUser postfix:Sysadmin or SysUser ntp:Sysadmin or SysUser tcpdump:Sysadmin or SysUser ghy:Common User puppet:Sysadmin or SysUser apache:Sysadmin or SysUser
后续内容更新中…
- Linux三剑客之—AWK
- Linux 三剑客之AWK
- Linux 三剑客之 awk 命令
- Linux三剑客之awk命令详解
- Linux文本处理三剑客之awk
- Linux三剑客之awk精讲
- 文本编辑三剑客之awk
- 文本三剑客之awk
- Linux之三剑客,awk、sed、grep的用法
- Linux文本处理三剑客之awk命令
- Linux 基础命令(十四)—— 文本处理三剑客之AWK
- Linux文本处理三剑客(awk)
- linux 三剑客命令(grep,sed ,awk)
- 深入浅出三剑客之awk必杀技一例
- 深入浅出三剑客之awk必杀技一例 【转】
- 文本处理三剑客之awk
- 文本处理三剑客之awk
- 文本处理三剑客之AWK
- C++:关于动态数组
- Android群英传学习——第一章、Android体系与系统架构
- Android动画效果之自定义ViewGroup添加布局动画
- javascript 日期格式化
- 分享如何利用思维导图进行营销策划使用攻略
- Linux三剑客之—AWK
- Makefile中用宏定义进行条件编译
- 记录自已学习之头文件的全局变量引用
- 解决MySql乱码
- jmeter怎么做接口测试、概念及常用方法小结
- 定时器的使用和实现
- Android_webview之加载网页
- PPP 区别 P2P
- iOS XMPP简单聊天的实现