zoukankan      html  css  js  c++  java
  • awk简单用法

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

    awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

    1、域分割符
    awk 在没有使用-F 指定分割符的时候。默认以空格为分割符。
    域分割 $0代表文本内容全文显示
    $1 代表分割第一个域
    $2 代表分割第二个域
    依次类推....
    awk -F: 分割符号为':'
    # cat /etc/passwd | awk -F: '{print $1,$2,}'

    2、域和记录
    awk执行时浏览域标记为$1,$2...$n,这种方法称为域的标识

    (1)、抽取域
    # cat /etc/passwd | awk -F: '{print $1}'

    (2)、$0代表所有记录
    # cat /etc/passwd | awk -F '{print $0}'

    (3)、单独打印记录
    # cat /etc/passwd | awk -F: '{print $1,$4}'

    (4)、打印报告头
    # cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}' | more

    (5)
    、打印信息尾
    # cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}END{"print =================="}' | more

    #cat passwd  | awk -F: 'BEGIN{print "===================:"}{print "User Name: "$1}END{print "======================="}'

    3、awk中的正则表达式

    (1)、匹配~
    # cat /etc/passwd |awk '{if($1~/root/) print $0}'

    # cat /etc/passwd | awk '$0~/root/'

    (2)、精确匹配
    # cat /etc/passwd | awk -F: '$1=="root"{print $0}'

    (3)、不匹配
    # cat /etc/passwd | awk '$0 !~ /root/'
    # cat /etc/passwd |awk '{if($1!~/root/) print $0}'
     
    (4)、小于
    # cat /etc/passwd | awk -F: '{if($3<200)print $3}'

    (5)、小于或等于
    # cat /etc/passwd | awk -F: '{if($3<=200)print $3}'   

    (6)、大于或者等于
    # cat /etc/passwd | awk -F: '{if($3>500)print $3}'   
    # cat /etc/passwd | awk -F: '{if($3>=500)print $3}'

    (7)、匹配多个关键字
    # cat /etc/passwd | awk -F: '$1~/(root|user)/'

    (8)、匹配行首
    # cat /etc/passwd | awk -F: '$1~/^root/'

    (9)、 awk 使用 && ||

    # cat /etc/passwd | awk -F: '{if($1=="root" && $5=="root") print $0}'
    # cat /etc/passwd | awk -F: '{if($1=="root" || $1=="sfsdfdsfds") print $0}'

    4、awk NF和NR
    (1)NF和NR,$NF打印域最后
    NF 浏览记录的域个数(统计列的段数)
    NR 已读的记录数(记录列行号)
    # cat /etc/passwd | awk -F: '{print NF}'
    # cat /etc/passwd | awk -F: '{print NF,NR}' 打印有几段并且输出每行的行号
    # awk '{if(NR<10 && $1~/root/)print $1}' /etc/passwd   行号小于10的,使用$1匹配root关键字
    # cat /etc/passwd | awk -F: '{print $NF}'  打印每段的最后一段

    5、AWK替换
    gsub (r,s)在整个$0中用s替代r
    # cat /etc/passwd | awk 'gsub(/root/,"losbyday") {print $1}'  将root替换成losbyday

    更多戳这里:

    AWK用法入门详解 http://www.cnblogs.com/losbyday/p/5854707.html
    awk命令详解二 :http://www.cnblogs.com/losbyday/p/5854725.html

  • 相关阅读:
    CSS学习笔记
    metadata的深入
    [极客大挑战 2019]BabySQL
    [极客大挑战 2019]LoveSQL
    [强网杯 2019]随便注
    [SUCTF 2019]CheckIn 1
    [ZJCTF 2019]NiZhuanSiWei 1
    [BJDCTF2020]Easy MD5
    [极客大挑战 2019]BuyFlag
    [ACTF2020 新生赛]BackupFile
  • 原文地址:https://www.cnblogs.com/losbyday/p/5854701.html
Copyright © 2011-2022 走看看