zoukankan      html  css  js  c++  java
  • Linux centos7 awk工具

    一、awk介绍

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

    二、awk上

     1.截取文档中的某个片段

    [root@davery ~]# mkdir awk                               先创建一个awk
    [root@davery ~]# cp /etc/passwd awk/0.txt
    [root@davery ~]#
    [root@davery ~]# cd awk

    [root@davery awk]# head -n3 0.txt        显示前3行
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@davery awk]#

    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $0}'   $0比较特殊为截取整行或者

    awk '{print $0}' 0.txt 无须指定分隔符

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [root@davery awk]#

    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1}'     把0.txt前3行,第1个字段($1)显示出来
    root
    bin
    daemon
    [root@davery awk]#

    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $2}' 把0.txt前3行,第2个字段($2)显示出来
    x
    x
    x
    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $3}' 把0.txt前3行,第3个字段($3)显示出来
    0
    1
    2
    [root@davery awk]# head -n2 0.txt |awk -F ':' '{print $6}' 把0.txt前2行,第6个字段($6)显示出来
    /root
    /bin
    [root@davery awk]#

    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1"#"$2"#"$3"#"}'  可以自定义格式'{print $1"#"$2"#"$3"#"}'
    root#x#0#
    bin#x#1#
    daemon#x#2#
    [root@davery awk]#

    [root@davery awk]# head -n3 0.txt |awk -F ':' '{print $1,$2,$3}'  把0.txt前3行,第1,2,3个字段($1,$2,$3)显示出来
    root x 0
    bin x 1
    daemon x 2
    [root@davery awk]#

    2.匹配字符或者字符串(查找并显示)

    [root@davery awk]# awk '/ro/' 0.txt 显示第一段含有ro的所有行
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    [root@davery awk]# awk -F ':' '$1 ~/oo/' 0.txt    ~代表匹配的意思,把0.txt里面第1个字段($1)含有oo的都显示出来
    root:x:0:0:root:/root:/bin/bash
    [root@davery awk]# awk -F ':' '$1 ~/ot/' 0.txt
    root:x:0:0:root:/root:/bin/bash
    [root@davery awk]# awk -F ':' '$1 ~/root/' 0.txt
    root:x:0:0:root:/root:/bin/bash
    [root@davery awk]#

    [root@davery awk]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1.$3}' 0.txt 匹配完root,然后再匹配test,支持多个表达式一起
    root 0
    operator 11
    [root@davery awk]#

    3.数学操作,==等于,>、>=、<、<=、!=

    [root@davery awk]#awk -F ‘:’ '$3="0"' 0.txt

    [root@davery awk]#awk -F ‘:’ '$3>="500"' 0.txt 加“”针对字符串

    [root@davery awk]#awk -F ‘:’ '$3>=500' 0.txt  针对数字不需要“”

    [root@davery awk]#awk -F ‘:’ '$7!="/sbin/nologin"' 0.txt

    [root@davery awk]#awk -F ‘:’ '$3>$4' 0.txt  

    [root@davery awk]#awk -F ‘:’ '$3>$4 && $3<"7" '0.txt 

    [root@davery awk]#awk -F ‘:’ '$3>1000 || $7=="/bin/bash" 0.txt 

    二、awk下

    awk内置变量,常用变量有OFS、NF、NR、-F 功能类似,用来定义分割符,作为输出时NF表示使用分隔符分隔后一共有多少段,NR表示行号。

    [root@davery awk]#head -5 /etc/passwd |awk -F ':'  '{OFS="#"} {print $1,$3,$4}'

    [root@davery awk]# head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
    root#0#0
    bin#1#1
    daemon#2#2
    adm#3#4
    lp#4#7
    [root@davery awk]#

    [root@davery awk]#awk -F ':' '{OFS="#"} {if ($3>1000) {printf $1,$2,$3,$4}}' 0.txt

    uaer1user2user3user4user6[root@davery awk]#

    [root@davery awk]# head -n3 /etc/passwd |awk -F ':' '{print NF}'
    7
    7
    7
    [root@davery awk]#

    [root@davery awk]# head -n3 /etc/passwd |awk -F ':' '{print NR}'
    1
    2
    3
    [root@davery awk]#

    [root@davery awk]#awk 'NR>40' 0.txt

    [root@davery awk]#awk -F ':' 'NR<20 && $1 ~/root/' 0.txt

    root:x:0:0:root:/root:/bin/bash

    [root@davery awk]#head -n 3 /etc/passwd |awk -F ':' '$1="root"' 

    root x 0 0 root /root /bin/bash
    root x 1 1 bin /bin /sbin/nologin
    root x 2 2 daemon /sbin /sbin/nologin
    [root@davery awk]#

    [root@davery awk]#awk -F ':'  '{(tot=tot+$3)}; END {print tot}' 0.txt

    [root@davery awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' 0.txt
    8629
    [root@davery awk]#

    [root@davery awk]# awk -F ':' '{if($1=="root") {print $0}}' 0.txt
    root:x:0:0:root:/root:/bin/bash
    [root@davery awk]#

  • 相关阅读:
    设计模式与23种设计模式的简单介绍
    一文读懂C++ Vector在算法竞赛中的常见用法
    一文读懂C++ String类在算法竞赛中的常见用法
    GO语言的单元测试与性能测试
    变量提升和函数提升及二者优先级
    闭包
    读《你不知道的JavaScript 中》-异步【3】Promise
    js数组方法-改变原数组和不改变原数组
    读《你不知道的JavaScript 中》-异步【2】回调
    组合类算法问题
  • 原文地址:https://www.cnblogs.com/davery/p/8734971.html
Copyright © 2011-2022 走看看