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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值