Awk学习_6

本文最后更新于2015年12月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

0.awk的程序设计模型

awk程序是由所谓的主输入(main input)循环组成的。一个循环是一个例程,它将一直重复执行直到由一些存在的条件终止它。你不必写这个循环,它是现成的,它作为一个框架存在,在这个框架中你编写的代码能够执行。

awk允许你编写两个特殊的例程,它们在任何输入被读取前所有输入都被读取后执行。它们是与BEGIN和END规则相关的过程。

1.awk的split/substr/index函数的使用

2.awk的next的使用

3.用awk处理多行记录

 

注意:

在命令行中使用awk时,必须有

  • 单引号
  • 大括号
参考链接:

=EOF=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2570.html

《Awk学习_6》上有5条评论


  1. ##awk复杂分隔符##
    多字符作分隔符
    $ echo "a||b||c||d" | awk -F '[|][|]' '{print $3}'
    c
    多种分隔符1
    $echo "a||b,#c d" | awk -F '[| ,#]+' '{print $4}'
    d
    多种分隔符2
    $echo "a||b##c|#d" | awk -F '([|][|])|([#][#])' '{print $NF}'
    c|#d

  2. awk中的FieldSeparator可以是由多字符组成的,比如:

    $ echo '"School","College","City"' | awk -F'","|^"|"$' '{for(i=1;i<=NF;i++){if($i)print $i}}'
    School
    College
    City

    如果你希望awk按普通字符解释「管道字符——'|'」,你需要用下面的方法:

    $ echo "a|b|c|d" | awk -F '[|]' '{print $3}'

  3. awk拆分文件很简单,使用重定向就好了。下面这个例子,是按第6例分隔文件,相当的简单(其中的NR!=1表示不处理表头)。

    $ cat netstat.txt
    Proto Recv-Q Send-Q Local-Address Foreign-Address State
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
    tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
    tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
    tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED

    $ awk 'NR!=1{print > $6}' netstat.txt
    $ ls
    ESTABLISHED FIN_WAIT2 LISTEN netstat.txt TIME_WAIT

    你也可以把指定的列输出到文件:
    $ awk 'NR!=1{print $4,$5 > $6}' netstat.txt

    再复杂一点:(注意其中的if-else-if语句,可见awk其实是个脚本解释器)

    $ awk 'NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > "1.txt";
    else if($6 ~ /LISTEN/) print > "2.txt";
    else print > "3.txt" }' netstat.txt

    AWK 简明教程
    http://coolshell.cn/articles/9070.html

  4. Linux之awk内建数学函数之左移运算、右移运算、按位取反运算
    https://www.dwhd.org/20150917_013542.html

    Linux之awk中 !a[$0]++ 与 !a[$1…]++ [转载自苦海无边博客]
    https://www.dwhd.org/20150917_020937.html

    Linux之awk实现ip地址转二进制和数字模式&十进制转二进制
    http://www.dwhd.org/20150910_011543.html

    Linux之awk实现ls -l输出文件权限的数字&打造加强版的ls命令
    http://www.dwhd.org/20150909_020139.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注