-
AWK是一种处理文本文件的语言,是一个强大的文本分析工具,主要进行列操作。
-
sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。
# 语法格式
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
- 和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用-f参数指定一个脚本文件,编辑命令的格式为:
/pattern/{actions}
condition{actions} # 满足什么条件 执行什么动作
和sed类似,pattern是正则表达式,actions是一系列操作。awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
实战例子:
# testfile的内容表示某商店的库存量:
ProductA 30
ProductB 76
ProductC 55
# 打印指定列的内容
# 自动变量$1、$2分别表示第一列、第二列等,类似于Shell脚本的位置参数,而$0表示整个当前行。
$ awk '{print $2;}' testfile
30
76
55
# 如果某种产品的库存量低于75则在行末标注需要订货:
$ awk '$2<75 {printf "%s\t%s\n", $0, "REORDER";} $2>=75 {print $0;}' testfile
ProductA 30 REORDER
ProductB 76
ProductC 55 REORDER
# awk命令可以像C语言一样使用变量(但不需要定义变量),比如统计一个文件中的空行数 /^ *$/ 空行正则
$ awk '/^ *$/ {x=x+1;} END {print x;}' testfile
# END 可写可不写,写表示 END前执行完毕后,再执行END后的语句
awk常用的内建变量
FILENAME 当前输入文件的文件名,该变量是只读的
NR 当前行的行号,该变量是只读的,R代表record
NF 当前行所拥有的列数,该变量是只读的,F代表field
OFS 输出格式的列分隔符,缺省是空格
FS 输入文件的列分融符,缺省是连续的空格和Tab
ORS 输出格式的行分隔符,缺省是换行符
RS 输入文件的行分隔符,缺省是换行符
例如打印系统中的用户帐号列表
文件内容:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
# BEGIN表示先执行{FS=":"}
$ awk 'BEGIN {FS=":"} {printf "%s\t%s\n" $1, $7;}' /etc/passwd
root
bin
daemon
adm
# 打印第一行和第七行\t tab空格 \n换行 %s 占位符
$ awk 'BEGIN {FS=":"} {printf "%s\t%s\n", $1,$7}' /etc/passwd
文章规划
-
shell学习之awk(七)
好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。
如果这个文章写得还不错,觉得「王采臣」我有点东西的话 求点赞👍求关注❤️求分享👥 对耿男我来说真的非常有用!!!
白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
王采臣 | 文 【原创】
如果本篇博客有任何错误,请批评指教,不胜感激 !
微信公众号: