`
pqcc
  • 浏览: 125233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

awk 笔记

 
阅读更多

1. 分割符: awk -F: '{print $1,$5}' test

   多分割符: awk -F'[:\t]' '{print $1,$3}' test

2. awk 环境变量:[不全]

    > 当前记录的第n个字段,字段间由FS分隔.

    > $0 完整的输入记录.

    > FILENAME 当前文件名

    > FS 字段分割符.

    > NF 当前记录中的字段数.

    > NR 当前记录数.

    > RS 记录分隔符(默认是一个换行符)。

    > RSTART 由match函数所匹配的字符串的第一个位置。

3. 匹配操作:

    awk '$1 ~/^root/' test 将显示test文件第一列中以root开头的行。

    awk '{max = {$1 > $3} ? $1: $3: print max}' test。如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。    

4. 范围模板:  awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。

5. 将多行按分割符合并为一行:

    cat ip.txt | awk -v  RS="["  '{print $1, $2, $3}'

6. 实例:    

    $ awk '/^(no|so)/' test-----打印所有以模式no或so开头的行。

    $ awk '/^[ns]/{print $1}' test-----如果记录以n或s开头,就打印这个记录。

    $ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一个域以两个数字结束就打印这个记录。

    $ awk '$1 == 100 || $2 < 50' test-----如果第一个或等于100或者第二个域小于50,则打印该行。

    $ awk '$1 != 10' test-----如果第一个域不等于10就打印该行。

    $ awk '/test/{print $1 + 10}' test-----如果记录包含正则表达式test,则第一个域加10并打印出来。

    $ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。

    $ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。

 

 

笔记原文:    http://www.linux.gov.cn/shell/awk.htm

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics