zoukankan      html  css  js  c++  java
  • linux 中awk用法

    awk 用法

    awk '条件类型1 {动作1} 条件类型2 {动作2} ...' filename

    awk内置变量

    FS :输入域分隔符,默认为一个空格或tab
    NR:目前 awk处理的是第几行数据
    NF: 每一行拥有的字段数目
    $0:代表当前行。 $1,$2,$3...代表被分隔后的各字段

    例子: 打印$2,$3中间用" %% "分隔符

    vigar@vigar-laptop:~$ ifconfig | grep "inet addr"
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
    vigar@vigar-laptop:~$ ifconfig | grep "inet addr" | awk '{print $2 " %% " $3}'
     addr:127.0.0.1 %% Mask:255.0.0.0
    addr:192.168.0.100 %% Bcast:192.168.0.255

    区别NR与NF的意义

    vigar@vigar-laptop:~$ last -n 5                                                      
    vigar    pts/0        :0.0             Tue Sep 18 23:36   still logged in   
    vigar    tty7         :0               Tue Sep 18 23:23   still logged in   
    reboot   system boot  2.6.32-21-generi Tue Sep 18 23:22 - 23:53  (00:31)    
    vigar    pts/1        :0.0             Mon Sep 17 21:31 - down   (02:00)    
    vigar    tty1                          Mon Sep 17 21:11 - down   (02:21)    
    
    wtmp begins Sat Sep  1 15:35:42 2012
    vigar@vigar-laptop:~$ last -n 5 | awk '{print $1 "\t lines: " NR  "\t columns: " NF}'
    vigar     lines: 1     columns: 10
    vigar     lines: 2     columns: 10
    reboot     lines: 3     columns: 11
    vigar     lines: 4     columns: 10
    vigar     lines: 5     columns: 9
              lines: 6     columns: 0
    wtmp      lines: 7     columns: 7

    从/etc/passwd中找出第三列小于10的数据

    vigar@vigar-laptop:~$ cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
    root:x:0:0:root:/root:/bin/bash    
    daemon    1
    bin       2
    sys       3
    sync      4
    games     5
    man       6
    lp        7
    mail      8
    news      9

    其中有问题,第一行的数据未正常显示,因为第一行时FS变量尚未被正常设置,这时要用begin

    vigar@vigar-laptop:~$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'
    root    0
    daemon    1
    bin    2
    sys    3
    sync    4
    games    5
    man    6
    lp    7
    mail    8
    news    9

    用一段awk脚本完成工资总数统计,呵呵,熟悉的情况下这比excel还快咧。。。

    vigar@vigar-laptop:~$ cat pay.txt 
    name 1st 2nd 3th
    johnny 23 23 34
    perry  24 24 25
    sherman 33 33 35
    vigar@vigar-laptop:~$ cat pay.txt | awk 'NR==1 {printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2 {total=$2+$3+$4; printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}'
          name        1st        2nd        3th      Total
        johnny         23         23         34      80.00
         perry         24         24         25      73.00
       sherman         33         33         35     101.00
    vigar@vigar-laptop:~$ 
    test-/opt/CC/hello/bin> ps -aux | awk '$4>0 {print $1 "\t"  $2 "\t" $4 "\t"  $11}'
    shiadmin        7470    0.1     /usr/NX/bin/nxagent
    p4admin 12230   15.2    java
    p4admin 13995   0.2     java
    shiadmin        17118   1.0     /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
    shiadmin        21822   1.2     /usr/bin/java
    p4admin 25350   0.5     java
    p4admin 25965   0.3     java
    p4admin 27456   1.2     java
    p4m     28450   0.5     /opt/mqm/bin/amqzmuc0
    p4m     28510   0.2     /opt/mqm/bin/amqzlaa0
    p4m     29844   0.6     /opt/mqm/bin/amqrmppa
  • 相关阅读:
    [转]关于WM_NCHITTEST消息
    微信小程序的年月日-年月日选择器基于picker的mode = multiSelector日期范围
    解决移动端浏览器 HTML 音频不能自动播放的三种方法
    小程序反编译
    CSS实现背景透明,文字不透明
    event.target 属性返回哪个 DOM 元素触发了事件。
    微信小程序去除button边框
    jQuery setInterval倒计时精确到毫秒
    获取openid [微信小程序]
    array_column() 函数[二维数组转为一维数组]
  • 原文地址:https://www.cnblogs.com/vigarbuaa/p/2692407.html
Copyright © 2011-2022 走看看