awk

awk基础入门

  • linux的一个命令,是一门计算机脚本语言。awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

  • awk基本命令

    awk '{print}' haha.txt //打印全部
    awk '{print $1}' haha.txt//打印第一行
    awk '{print $3}' haha.txt//打印第三行
    awk '{print $1"\t"$3}' haha.txt//打印第一行和第三行用制表符号隔开
    awk '{print $NF}' haha.txt //打印出最后一列
    awk '{print $(NF-1)}' haha.txt //打印出最后第二列
  • record 横行 field 竖行

    • NR 横行的数量
    • NF 竖行的数量
    [kiosk@foundation45 Desktop]$ awk '{print NR"\t" $1"\t"$3}' haha.txt //打印出行号

    tips:awk认为空格是将两个拼接起来,所以要想输出有空格的话,必须加逗号,awk的默认分隔符是空格,所以加逗号之后,输出会出现一个空格的效果。也可以连接制表符号等等。

  • awk的查找功能

    • 查找数字
    查找第五列中数字是60的
    [kiosk@foundation45 Desktop]$ awk ' $5==60{print $0 }' haha.txt
    张三123  157 60
    张三1720  155 60
    张三426  159 60
    张三4323  151 60
    • 查找字符串
    //注意:字符串要加双引号,否则不能查找成功。
    [kiosk@foundation45 Desktop]$ awk ' $1=="张三17"{print $0 }' haha.txt
    张三1720  155 60
  • awk的内部变量

变量 作用
NF 竖行
NR 横行
FS 默认输入分割符号
OFS 默认输出分割符号
FILENAME 文件名
ENVIRON 支持队列中系统环境变量的使用
RS 控制记录分割符

  • 改变默认分割符号。

    [kiosk@foundation45 Desktop]$ awk 'BEGIN{FS=","}{print $2,$1}'
    //把逗号作为默认分隔符。
  • 同时操作两个文件的时候,我们可能需要用文件名来区分,可以打印出filename。

    [kiosk@foundation45 Desktop]$ awk '{print FILENAME"\t" $2,$1}' haha.txt 
  • 隐藏某一行信息不被输出

    [kiosk@foundation45 Desktop]$ awk '{$3="xxxx";print $0}' haha.txt 
    输出效果:
    张三57 男 xxxx 154 59
    张三58 男 xxxx 152 52
    张三59 女 xxxx 154 56
    • awk自定义变量和计算
  • 自定义变量计算

    • awk支持加减乘除运算(先做运算,再做字符串的拼接)
    [kiosk@foundation45 Desktop]$ awk '{a=2; b=2; print a b}'
     //enter键入
    22
    ^C
    [kiosk@foundation45 Desktop]$ awk '{a=2; b=2; print a+b}'
    
    4
    ^C      
    • 正则表达式(Regular Expression)
  • ./abc/ abc三个字符连在一起的

    • ”abc”
    • “xxabcxx’

    string.txt

    abc
    abcxx
    xxabch
    a b c
    adc
    [kiosk@foundation45 Desktop]$ awk '/abc/{print $0}' string.txt 
    abc
    abcxx
    xxabch
  • ./a.c/ axc类型的

    • ”abc”
    • “acc”
    • “adc”
    [kiosk@foundation45 Desktop]$ awk '/a.c/{print $0}' string.txt 
    abc
    abcxx
    xxabch
    adc
  • 转译字符\ 用来匹配特殊字符的

    • ./a\.c/ 只匹配a.c的
  • ^ 和 $

    • /^abc/ 匹配abc出现在最前面
    • /abc$/ abc必须出现在字符串的结尾
  • []

    • /a[xyz]c/ 匹配axc,ayc,azc这三个,其他的是不可以的。

    • /a[a-z]c/ 匹配a和c之间必须出西安一个小写字母。

    • /a[a-zA-Z]c/ 出现大小写字母都是可以的。

    • 写在[]里面的^表示不是的意思

      • /a【^a-z】c/ 不能出现a-z
  • *和 +和?

    • /a*b/ a可以出现多次
    • /a+b/
    • /a?b/
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页