zoukankan      html  css  js  c++  java
  • awk of shell

    awk非常的优秀,运行效率高,而且代码简单,对格式化的文本处理能力超强。基本上grep和sed能干的活awk全部都能干,而且干得更好。


    awk '{pattern + action}' {filenames}

    尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

    awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

    #cat /etc/passwd |awk  -F ':'  '{print $1"	"$7}'
    root    /bin/bash
    daemon  /bin/sh
    bin     /bin/sh
    sys     /bin/sh


    cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
    name,shell
    root,/bin/bash
    daemon,/bin/sh
    bin,/bin/sh
    sys,/bin/sh
    ....
    blue,/bin/nosh

    awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。可以理解为初始化和扫尾。

    awk里面的if..else; 

     while ; do..while; for; break; continue; printf语法都和C语言的语法一致;而且awk支持使用if (key inarray)这样的判断语句(其中,array是数组,这一点和python的语法非常相像。);awk支持使用for (key inarray)这样的语法来遍历数组(也是和python的语法很相像。)



    搜索/etc/passwd有root关键字的所有行

    #awk -F: '/root/' /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

    搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd       <----^ 代表搜索开头为root 的行

    搜索/etc/passwd有root关键字的所有行,并显示对应的shell

    # awk -F: '/root/{print $7}' /etc/passwd             
    /bin/bash

     这里指定了action{print $7}





  • 相关阅读:
    Codeforces 271 Div 2 B. Worms
    Codeforces 271 Div 2 A Keyboard
    CSU 1333 Funny Car Racing (最短路)
    CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)
    CSU 1328 近似回文词(2013湖南省程序设计竞赛A题)
    HDU 5033 Building
    HDU 1058 Humble Numbers(离线打表)
    HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006
    HDU 5053 the Sum of Cube
    MySQL练习-employees数据库(二)
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501462.html
Copyright © 2011-2022 走看看