zoukankan      html  css  js  c++  java
  • awk命令笔记

    awk是啥?

      awk(奥克)是linux中一个强大的分析工具,linux面试必考

    [root@rainbol ~]# awk
    Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
    Usage: awk [POSIX or GNU style options] [--] 'program' file ...
    POSIX options:        GNU long options: (standard)
        -f progfile        --file=progfile
        -F fs            --field-separator=fs
        -v var=val        --assign=var=val
    Short options:        GNU long options: (extensions)
        -b            --characters-as-bytes
        -c            --traditional
        -C            --copyright
        -d[file]        --dump-variables[=file]
        -e 'program-text'    --source='program-text'
        -E file            --exec=file
        -g            --gen-pot
        -h            --help
        -L [fatal]        --lint[=fatal]
        -n            --non-decimal-data
        -N            --use-lc-numeric
        -O            --optimize
        -p[file]        --profile[=file]
        -P            --posix
        -r            --re-interval
        -S            --sandbox
        -t            --lint-old
        -V            --version
    
    To report bugs, see node `Bugs' in `gawk.info', which is
    section `Reporting Problems and Bugs' in the printed version.
    
    gawk is a pattern scanning and processing language.
    By default it reads standard input and writes standard output.
    
    Examples:
        gawk '{ sum += $1 }; END { print sum }' file
        gawk -F: '{ print $1 }' /etc/passwd

    普通打印

    awk '{print}' access.log       #打印所有列  或者 $0
    awk '{print $1}' access.log     #打印第一列    
    awk '{print $1,$4}' access.log  #打印第一列第四列,注意中间用英文逗号分隔
    awk '{print $1,"	",$4}' access.log    #	表示在每一列使用制表符之间对齐,方便查看格式
    awk '{print $1 $4}' access.log  #如果不加逗号或者加入空格,awk做拼接操作,$1和$4就拼接在一起,所以','为awk默认分隔符,其代表一个空格

      #

    行列号打印  NR(number of record)  NF(field of record)

    awk '{print NR "	" $1,"	",$4}' access.log    #在第一列插入行号
    awk '{print NF "	" $1,"	",$4}' access.log    #在第一列插入该行的所有列(注意: awk默认是以空格计算间隔的列)
    awk '{print $NF}' access.log   #打印最后一列的内容
    awk '{print $(NF-1)}' access.log   #打印最后第二列的内容

      

    逻辑判断式

    awk '$1!="192.168.1.1" {print $1 ,$4}' access.log    #打印第一列中没有192.168.1.1的ip号,注意不加引号默认为数字判断
    awk 'NF!=2 {print $0}' access.log    #打印中NF中不是2段的数据

    自定义分割符

    #输入分割符    
    awk 'BEGIN{FS=","}{print $1,$2}' access.log      #将默认空格分割符变为默认','分割符,使得遇到','自动分割
    #输出分割符
    awk 'BEGIN{OFS=","}{print $1,$2}' access.log    #将输出的默认空格分割符变为','
    awk 'BEGIN{FS=",";OFS=","}{print $1,$2}' access.log    #将输出的默认空格分割符变为','

    多文件拼接

    awk '{print $0}' a.txt b.txt  ...  #多文件拼接直接在文件后面加文件就行了
    
    awk '{print FIRENAME,$0}'  a.txt   #FIRENAME加入一列文件名,方便查看文件
    
    awk '$1="**.**.**.**"{print $0}' access.log    #如果不想要别人看到某一列的内容并替换为其他可以这么写

    甚至还可以计算

    [root@rainbol logs]# awk '{a=1;b=3;print a+b}'
    
    4
    #但注意如果字符串中数字和其他字符拼接在一起,如:a = 'aa123',b不变,那么结果为3,如果a='123aa',b不变,结果为126

    awk正则表达式

    /abc/
    #可以
    "abcxx"
    "xxxabcxxx"
    
    #不可以
    "axxbxxc" "ab c" 只要abc连续都配置


    awk '/abc/{print$0}' a.txt  #按行搜索只有符合正则的行都打印出来
    /a.c/
    #可以
    "abc"
    "a c"
    
    #不可以
    "acb"
    "ac"
    "aaacc"
    
    .表示任意字符,注意是一个,如果用两个那就是/a..c/,如果就是想匹配a.c怎么办,使用转义字符/a.c/
    /^abc/
    #可以
    "abcsad"
    
    #不可以
    "aabc"
    
    ^表示匹配字符串开头的,abc要出现在最前面才行
    $与其正好相反,/abc$/表示abc要出现在最后面才行
    /a[123]c/
    #可以
    "a1c"
    "a2c"
    "a3c"
    #不可以
    "abc"
    "a11c"
    括号表示a和c中间必须包括1,2,3中间的任意一个就行了
    当还可以这样/a[a-z]c/    /a[0-9]c/    /a[A-Z]c/    /a[a-zA-Z0-9]/  
    /a[^a-z]c/  #在方括号中出现^表示非,也就是不能出现a-z的字母  所以"abc"是错的
    /a*c/
    #可以
    "aaaaaac"
    "c"
    #不可以
    "ccca"
    # *表示匹配0个或者多个a,匹配为*号前面的一个字符
    
    /a+c/
    #可以
    "ac"
    "aaaaac"
    #不可以
    "c"
    # +表示匹配1个或者多个a,匹配为+号其那面的一个字符
    
    
    
    /a?c/
    #可以
    "c"
    "ac"
    #不可以
    "aaaac"
    # ?表示匹配0个或者1个a,匹配为?号前面的一个字符
    /ab{3}c/
    #可以
    "abbbc"
    #不可以
    "abc"
    "abbc"
    
    #{}表示匹配次数,{3}表示前面一个字符必须要出现3次才能匹配,多也不行少也不行  

    /ab{3,5}/  #逗号表示 到..之间都可以,可以出现3次或者出现4次或者出现5次,并且包括3和5  

    /ab{3,}c/  #出现包括3个b,后面多少b都无所谓
    /(ab)+c/
    #可以
    "abc"
    "ababc"
    #不可以
    "abbc"
    
    # ()小括号表示在括号内看做一个整体,小括号后面可以接匹配规则

    其他 

      猛击这里

  • 相关阅读:
    《JavaScript DOM 编程艺术》读书笔记
    《精通CSS:高级Web标准解决方案》读书笔记
    计算机专业考研复试面试数据结构
    单元测试框架NUnit 之 Extensibility 例子
    单元测试框架NUnit 之 Extensibility可扩展性
    你应该知道的 asp.net webform之异步页面
    viewstate 应该注意的
    必须要知道的session
    javascript应该注意的小case数据类型
    单元测试框架NUnit 之 Attributes特性(二)
  • 原文地址:https://www.cnblogs.com/RainBol/p/11297952.html
Copyright © 2011-2022 走看看