awk工具
2017-07-05 00:00
190 查看
摘要: awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk -F 指定分隔符(默认以空格为分隔符)
说明: 指定分隔符后该命令只识别指定的分隔符,如果某行无指定的分隔符则会打印其整行!
awk的匹配功能(匹配用“~”)
说明: 当“1000”加引号时会被当做是字符串,以ASC码(二进制)的方式进行计算处理,不加引号的时候会被当做是数值处理。
说明: 当使用一个“=”等号时表示为等号前面字符赋值,使用两个“==”表示逻辑关系(进行判断)。
说明: “&&”表示并且。
说明: “||”表示或者。
NR (=number row)表示行号
注: 类似于grep -n。
NF (=number fragment)表示段数(列)
求和
9.6 awk命令(上)
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。awk应用
awk打印指定内容
awk ‘{print $n}’ [filename] 在此n代表数字(当n=0时$0代表文件所有内容,当n=1,2,3...时$1,2,3...代表相应列)awk -F 指定分隔符(默认以空格为分隔符)
[root@adai003 awk]# awk -F ':' '{print $1}' test.txt root bin daemon daemon Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c …… 可以一次打印多列: [root@adai003 awk]# awk -F ':' '{print $1,$2,$3}' test.txt |head -3 root x 0 bin x 1 daemon x 2 可以指定打印各列内容时的分隔符号: [root@adai003 awk]# awk -F ':' '{print $1"#"$2"#"$3}' test.txt |head -3 root#x#0 bin#x#1 daemon#x#2
说明: 指定分隔符后该命令只识别指定的分隔符,如果某行无指定的分隔符则会打印其整行!
awk的匹配功能(匹配用“~”)
打印含有“oo”的所有行: [root@adai003 awk]# awk '/oo/' test.txt root:x:0:0:roprot:/root:/bin/bash Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 打印第一段含有“oo”的行: [root@adai003 awk]# awk -F ':' '$1 ~ /oo/' test.txt 注:‘~’表示匹配! 打印第一段中含有“oo”的行 root:x:0:0:roprot:/root:/bin/bash Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c 支持正则表达式: [root@adai003 awk]# awk -F ':' '$1 ~ /o+/' test.txt root:x:0:0:roprot:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c [root@adai003 awk]# awk -F ':' '$1 ~ /oo+/' test.txt root:x:0:0:roprot:/root:/bin/bash Ctrl-Alt-Deoooleoooote ios handled by /usr/lib/systemd/system/c 支持多个表达式同时执行: [root@adai003 awk]# awk -F ':' '/root/ {print $1,$3} /daemon/ {print $1,$3,$4}' test.txt root 0 daemon 2 2 daemon 2 2 即:打印各行中带有root或daemon的第1、3、4段内容。也可以写成“ awk -F ':' '/root|daemon/ {print $1,$3,$4}' test.txt”
针对数学表达式的用法
数值比较当'$3>=1000 {print $1}'时: [root@adai003 awk]# awk -F ':' '$3>=1000 {print $1}' test.txt user001 当'$3>="1000" {print $1}'时: [root@adai003 awk]# awk -F ':' '$3>="1000" {print $1}' test.txt |head -3 daemon adm lp 匹配字符串: [root@adai003 awk]# awk -F ':' '$7!="/sbin/nologin" ' test.txt root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt user001:x:1000:1000::/home/user001:/bin/bash “!=”表示不等于
说明: 当“1000”加引号时会被当做是字符串,以ASC码(二进制)的方式进行计算处理,不加引号的时候会被当做是数值处理。
[root@adai003 awk]# head -n3 test.txt |awk -F ':' '{OFS=":"} $1="root"' root:x:0:0:root:/root:/bin/bash root:x:1:1:bin:/bin:/sbin/nologin root:x:2:2:daemon:/sbin:/sbin/nologin [root@adai003 awk]# awk -F ':' '$3=="0" {print $1}' test.txt root
说明: 当使用一个“=”等号时表示为等号前面字符赋值,使用两个“==”表示逻辑关系(进行判断)。
9.7 awk 命令(下)
字符比较大小[root@adai003 awk]# awk -F ':' '$3<$4' test.txt adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@adai003 awk]# awk -F ':' '$3==$4' test.txt |head -3 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@adai003 awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
说明: “&&”表示并且。
[root@adai003 awk]# awk -F ':' '$3>1000 || $7!="/sbin/nologin"' test.txt root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt user001:x:1000:1000::/home/user001:/bin/bash [root@adai003 awk]# awk -F ':' '$3>1000 || $7~/bash/' test.txt root:x:0:0:root:/root:/bin/bash user001:x:1000:1000::/home/user001:/bin/bash
说明: “||”表示或者。
OFS指定打印时的分隔符
语法1: [root@adai003 awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print $1,$3,$7}' test.txt root#0#/bin/bash user001#1000#/bin/bash 语法2: [root@adai003 awk]# awk -F ':' '{OFS="#"} {if ($3>1000 || $7~/bash/) {print $1,$3,$7}}' test.txt root#0#/bin/bash user001#1000#/bin/bash
NR (=number row)表示行号
[root@adai003 awk]# awk -F ':' '$3<5 && $7!="/sbin/nologin" {print NR":"$1}' test.txt 1:root [root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NR":"$1}' test.txt 4:adm 5:lp 打印前三行: [root@adai003 awk]# awk -F ':' 'NR<=3' test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@adai003 awk]# awk -F ':' 'NR<=3 && $1~/root/' test.txt root:x:0:0:root:/root:/bin/bash
注: 类似于grep -n。
NF (=number fragment)表示段数(列)
[root@adai003 awk]# awk -F ':' '$3<5 && $3>2 && $7=="/sbin/nologin" {print NF":"$1}' test.txt 7:adm 7:lp
求和
[root@adai003 awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt 5657
相关文章推荐
- linux字符处理工具tail, awk, grep
- Linux/Unix工具与正则表达式的POSIX规范--awk使用中遇到的坑
- linux 文本分析工具---awk命令(7/1)
- 【转载】Linux工具之AWK 1.简明入门
- shell脚本工具之awk命令
- 详解 awk 工具的使用方法(转载)
- 详解 awk 工具的使用方法
- 读书笔记--find、sed、awk工具的使用
- shell工具——cut、tr、grep、sort、uniq、re、sed、awk
- awk工具
- linux下字符串处理工具二:awk( 二),awk脚本
- awk工具使用
- AWK --脚本语言、工具详解 (GCC内嵌,如同SQL 字段驱动解析文本)
- AWK --脚本语言、工具详解 (GCC内嵌,如同SQL 字段驱动解析文本)
- awk工具
- 正则表达式和使用正则表达式的grep,sed,awk等工具
- Linux指令_字段处理工具awk
- grep,sed,awk工具的使用
- Oracle 使用 ass.awk 工具查看 system state dump 说明
- 4000 shell工具之awk