• awk入门及进阶


    awk入门部分

      awk不仅仅是linux系统中的一个命令,而且还是一种编程语言,可以用来处理数据和生成excel表格。处理的数据可以是一个或多个文件,可以是标注输入,也可以通过管道符获取标准输入。

      awk -F:指定awk按照什么样的标准进行文本切割,切割成一列一列的。如果不知道-F参数,awk默认按照空格进行文本切割。

      {}中的print代表输出的意思,

      $代表取列的意思,$1就是取第一列,以此类推,

      $0默认输出所有内容,

      $NF默认取每一行的最后一列。

     (1)awk '条件' 文件名

     例:awk '{print $1}' yunjisuan.txt

     (2)awk -F "分隔符号" '条件' 文件名

     例:awk -F ":" '{print $1}' yunjisuan.txt

     (3)awk [options] 'pattern {action}' file

      [options]:参数(如:-F)

      pattern:模式,模式就是条件,内容的查找范围,具有过滤作用,如果没有模式,默认输出某一列的所有内容。

      {action}:动作,动作是要干什么,针对过滤出的内容,如果没有动作,默认全部输出。

      例:awk -F ":" 'NR==3{print $1}' yunjisuan.txt

      分析:awk -F "[:/]+" 'NR==3{print $1}' yunjisuan.txt中"[:/]+"的含义:

     (1)"[:/]":表示":"和"/"都作为分隔符,分割时遇到":"和"/"都进行分割。

     (2)"[:/]+":"+"表示贪婪,也就是":"和"/"连在一起表示一个分隔符,即":/",而"[:/]+"中所含有的分隔符为":"、"/"、":/"这三个分隔符,分割时遇到这三个分隔符都进行分割。   awk -F 参数 'BEGIN{}模式{动作}ECD{}' 文件名

      BEGIN模块:告诉awk,数据要如何读。    ECD模块:告诉awk程序要如何结束。

      NR这个符号的真的含义不是行号,而是数据被awk读取一段以后,NR就会记录一次。由于awk默认以 作为每次读数据的结束标志,因此NR就恰好等于行号了。

      默认awk读入换行符和输出换行符都是 。

      我们可以通过BEGIN模块,再awk读取数据之前设定它的读入换行符是什么,也就是修改awk默认的读数据时的默认换行符。(RS:读入换行符,ORS:输出换行符)

      awk 'BEGIN{RS=":";ORS="|"}{print $1}' yunjisuan.txt

      sort:排序,默认按照26个英文字母从a到z排序

      sort -n:按数字排序

      sort -rn:逆转排序,数字按从大到小排序

      sort -k:指定第几列进行排序,如sort -k2,第二列进行排序

      uinq:去重,去掉重复的,字母不区分大小写

      uniq -c:去重计数

      tr:代替 

      例:(1)echo "1:2:3:4:5" | tr ":" "+"

              (2)1+2+3+4+5

      按照单词出现频率进行降序排序(计算文件中每个单词重复数量)

      sed -r '1,10s#[^a-zA-Z]+# #g' /etc/passwd>/server/files/count.txt

    awk进阶部分

      awk的几种模式

      (1)正则表达式模式

      (2)比较表达式模式

      (3)范围模式

      (4)特殊模式BEGIN和END

      正则表达式模式:"~":表示进行正则匹配     awk '$5~/^r/' test

                                 "!~":表示取反,用于表达与~相反的意思。

      比较表达式模式:例:awk 'NR>=23&&nr<==30' /etc/services

      范围模式:例:awk 'NR==2,NR==5{prnt NR,$o}' count.txt

      BEGIN和END模式:awk -F ":" 'BEGIN{我是开头}{print $0}END{我是结尾}' test

    awk里变量都可以赋值,变量的初始值都是0。

    awk 'BEGIN{a=2;b=3;print a+b}'

    "/"代表除,"*"代表乘,"**"代表乘方,

    计算文件内的行数:awk '{i=i+1}END{print i}' test   其中i=i+1等于i=++

    计算文件内所有数字之和:awk '{i=i+$0}END{print i}' 文件名或文件路径

    计算文件内所有数字之积:awk '{BEGIN{i+1}i=i*$1}END{print i}' 文件名或文件路径

    awk数组的应用

    awk 'BEGIN{h[10]="lx";h[11]="HS";h[12]="IZ";h[13]="hushi"; for(i in h) print i}'

    for:循环                                         i:变量

    in:在哪取值                                    h:数组

      

    转载于:https://www.cnblogs.com/mhqy/p/9871471.html

  • 相关阅读:
    对进程空间的认识
    自己实现智能指针
    实现一个string类
    常见问题总结
    pong game using ncurses
    知识梳理
    经典算法回顾
    自己实现more命令
    表的垂直拆分和水平拆分-zz
    MySQL索引原理及慢查询优化-zz
  • 原文地址:https://www.cnblogs.com/twodog/p/12135729.html
Copyright © 2020-2023  润新知