zoukankan      html  css  js  c++  java
  • linux_awk小例子

    集群为什么那么慢,等的人无语啊。。。。。。

    1:awk '/555555*/' test

    打印所有包含模式/555555*/的行

    2:awk '{print $1}' test

    打印文件的第一个字段,字段从行的左端开始,以空白符分隔

    3:awk '{print $1,$3}' test

    打印文件的第一,第三个字段

    4:awk '/555555/{print $1,$3}' test
    打印包含模式/555555/的第一,第三个字段

    awk原理:

    1):awk使用一行作为输入,并将这一行赋给内部变量$0,默认时每一行也可以称为一个记录,以换行符结束。

    2):然后,行被空格分解成字段,每一个字段存储在已编号的变量中,从$1开始,可以多达100个字段。

    3):awk如何知道空格是用来分隔字段的呢?因为有另一个内部变量FS用来确定字段的分隔符。初始时,FS被赋为空格——包含制表符和空格符。如果需要使用其他的字符分隔符,如冒号或破折号,则需要将FS变量的值设为新的字段分隔符。

    4):awk打印字段时,将以下面的方式使用print函数:{print $1,$3};逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格。逗号被OFS变量中存储的字符替换。

    5):awk输出之后,将从文件中获取另一行,并将其存储到$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。这个过程将持续到整个文件的所有行都处理完毕。

    转义序列:转义序列用一个反斜杠后跟一个字母或数字来表示。它们可以用在字符串中,代表制表符,换行符,换页符等。

    5:awk '/zhangfei/{print "\t\twu hu shangjiang:" $1,$2 "!"}'

    wu hu shangjiang:zhangfei xiuhua!

    \t:制表符,tab键

    6.打印数字时,可能需要控制数字的格式。这可以通过printf函数来实现,但是,通过设置一个特殊的awk变量OFMT,使用print函数时也可以控制数字的打印格式。OFMT的默认值时“%.6gd",表示只打印小数部分的前六位。

    awk 'BEGIN{OFMT="%.2f";print 1.23456789,12E-2}'

    1.23 0.12

    如果设置了变量OFMT,在打印浮点数时,就只打印小数部分的前两位。百分号表示接下来要定义格式。

    BEGIN:必须大写

    7:

    1):[root@localhost tmp]# echo "UNIX" | awk '{printf "|%-15s|\n",$1}'
             |UNIX           |
    2):[root@localhost tmp]# echo "UNIX" | awk '{printf "|%15s|\n",$1}'
             |           UNIX|
    1): 对于echo命令的输出,unix是经管道发给awk。printf函数包含一份控制串。百分号让printf做好准备,它要打印一个占15非格,向左对 齐的字符串,这个字符串夹在两个竖杠之间,并且以换行符结尾。百分号后的短划线表示左对齐。控制穿后面跟了一个逗号和$1。printf将根据控制串中的 格式说明来格式化字符串unix。

    2):字符串unix被打印成一个占15格,向右对齐的字符串,夹在两个竖杠之间,以换行符结尾。


    8.[root@localhost tmp]# awk '{printf "The name is: %-15s ID is: %-15d Money is: %-15d\n",$1,$2,$3}' liuguanzhang
    The name is: liubei              ID is: 1                Money is: 10000
    The name is: guanyu          ID is: 2                Money is: 2000
    The name is: zhangfei        ID is: 3                Money is: 1000

    9.[root@localhost tmp]# awk '{printf "|%-15s| %-15s| %-15s\n",$1,$2,$3}' liuguanzhang
    |liubei             | 1              | 10000
    |guanyu         | 2              | 2000
    |zhangfei        | 3              | 1000

    10:root@localhost tmp]# awk '{max=($1>$2)?$1:$2;print max}' filename

    如果记录的第一个字段的值大于第二个字段的值,则把问号后面那个表达式的值赋给max,否则就将冒号后面的那个表单时的赋给max。

    11:awk -F: 'NF != 7{printf("line %d,does not have 7 fields: %s\n",NR,$0)} $1 !~/[A-Za-z0-9]/{printf("line %d,nonalphanunmeric user id: %s\n",NR,$0)} $2=="*"{printf("line %d,no password:%s\n",NR,$0)}' passwd

    awk的字段分隔 符是冒号;如果字段数(NF)不等于7,则执行接下来的操作块;printf函数打印字符串“line<行号>,does not have 7 fields:”,后面跟上当前记录的记录号(NR)和记录本身($0);如果第一个字段($1)中不含任何字母和数字字符,printf函数就打印字符 串“nonalphanumberic user id:”,后面跟上当前记录的记录号和内容;如果第二个字段是一个星号,就打印字符串“no passwd:",后面跟上记录号和记录本身.

    12:awk -F: '/Nancy McNeil/{$1="Louise Mclnnes";print $0}' test

  • 相关阅读:
    python 元类
    python中__init__()、__new__()、__call__()、__del__()用法
    python内置数据结构方法的时间复杂度
    时间复杂度和空间复杂度
    数据结构及算法(1)
    sys模块python
    python中的文本操作
    python 中的os模块
    python 几种不同的格式化输出
    【js】null 和 undefined的区别?
  • 原文地址:https://www.cnblogs.com/xupeizhi/p/2605371.html
Copyright © 2011-2022 走看看