AWK Linux文本分析工具

AWK Linux文本分析工具


  1. AWK是一种速度较快,功能齐全的文本分析工具,可以用来读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,
    实际上 AWK 的确拥有自己的语言:AWK 程序设计语言,允许我们创建简短的程序完成对文本文件的分析;
  2. AWK默认已经安装在linux系统中,因此我们不需要安装就可以使用,默认情况下,AWK以空字符分割列,当然我们可以配置这个分隔符;

基本语法示例


awk 'BEGIN {program} /search_pattern/ { action_to_take_on_matches; another_action; } END {program}' file_to_parse

awk 'BEGIN {FS=":"; print "User\t\t\tUID\t\t\tGID\t\t\tHome\t\t\tShell\n---------------------------"} /root/ {print $1,"\t\t\t",$3,"\t\t\t",$4,"\t\t\t",$6,"\t\t\t",$7;} END {print "-----------------\nFile Complete!"}' /etc/passwd

默认情况下,我们可以省略Search Pattern和action,如果action被省略,AWK会将其设置为默认值’print’,打印所有行

函数,流程控制请看下面


请看第7篇参考文档

AWK内置变量


参数名称参数解释
ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行 -F选项
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符

使用举例



  1. echo “1 carrot sandy

2 wasabi luke

3 sandwich brian

4 salad ryan

5 spaghetti jessica” > favorite_food.txt

匹配在第二列中以’sa’开头的事务,awk '$2 ~ /^sa/' favorite_food.txt

匹配行中第二列不易’sa’开头的事务,用此表达式:awk '$2 !~ /^sa/' favorite_food.txt

  • |命令 | 解释 |
    |————————————-|:——————-:|
    |awk ' {print $1,$3} ' file|打印第一列和第三列
    |awk ' {print $0} ' file| 带音整行,$0表示整行内容,毕竟AWK是以行为处理单位的嘛
    |awk '/pattern/ {print $2}' file| 打印匹配行的第二列
    |awk -f awk_script.awk file | 和sed一样,awk也可以将处理命令放在一个脚本文件中,使用-f参数引入
    |awk 'BEGIN {print "hello world"}'| 在输出处理结果之前先输出依据hello word
    |awk -F "" 'program' files | 设置文件中行以null作为分隔,也就是空格,TAB等
    |awk -F "regex" 'program' files| FS也可以被设置为正则表达式
    |awk 'BEGIN { for (i = 1; i <= 7; i++) print int(101 * rand()) }'| 打印0到100的随机数
    |awk -F: '{ print $1 }' /etc/passwd | sort| 输出系统用户名并且排序
    |awk 'END { print NR }' inputfile| 打印文件的行数,NR意思是Number Rows
    |awk 'NR % 2 == 0' data| 打印文件奇数行
    |awk '$1 ̃/J/' inputfile|在所有输入行的第一列中匹配以J开头的行
    |awk '$1 ̃!/J/' inputfile| 和上面相反
    |echo aaaabcd | awk '{ sub(/a+/, "<A>"); print }'| 在aaaabcd中匹配aaaa并且用…替换,sub是一个AWK函数
    |echo a b c d | awk '{ OFS = ":"; $2 = ""; print $0; print NF }'| OFS 是Output Field Separator 的缩写,这个语句将输出”a::c:d”
    |echo a b c d | awk '{ OFS = ":"; $2 = ""; $6 = "new";print $0}'|输出a::c:d::new
    |awk -n '/^root/{p;q;}' /etc/passwd|打印第一个匹配的结果
    |awk -F\\\\ ’...’ inputfiles ...| 设置FS为\
    |awk 'BEGIN { OFS = ";"; ORS = "\n\n" } { print $1, $2 }' inputfile| 设置输出列分隔符和行分隔符
    |awk 'BEGIN { OFMT = "%.0f"; print 17.23, 17.54 }' | 设置浮点数输出格式输出
    |awk 'BEGIN {msg = "Dont Panic!";printf "%s\n", msg}'}| 像C语言一样输出字符串
  • 一个awk脚本例子

    1 #! /bin/awk -f

    2 BEGIN {FS=”:”; print “User\t\t\tUID\t\t\tGID\t\t\tHome\t\t\tShell\n—————————”}

    3 /root/ {print 1,"\t\t\t", 3,”\t\t\t”, 4,"\t\t\t", 6,”\t\t\t”,$7;}

    4 END {print “—————–\nFile Complete!”}
    执行./awk.awk /etc/passwd查看系统用户内容

  • 参考文档


    1. https://www.digitalocean.com/community/tutorials/how-to-use-the-awk-language-to-manipulate-text-in-linux
    2. https://linuxconfig.org/learning-linux-commands-awk
    3. http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
    4. http://www.gnu.org/software/gawk/manual/gawk.html
    5. http://www.grymoire.com/Unix/Awk.html
    6. http://www.cyberciti.biz/faq/bash-scripting-using-awk/
    7. http://www.computerhope.com/unix/uawk.htm
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值