zoukankan      html  css  js  c++  java
  • awk命令学习

    据说有人用这个装逼。哈哈。我只求掌握基本。

    awk '条件1{动作1}条件2{动作2}........'   文件名

    条件(Pattern):

    -一般使用关系表达式作为条件

    -可以使用函数等

    动作(Action):

    -格式化输出

    -流程控制语句

    测试文档:

     

    1.输出第2,4行

    [root@myfuture ~]# awk '{print $2 "	" $4 }' student.txt 
    Name    Mark
    furong    85
    fengj    60
    cang    70

    2.输出df -h 的第1,3行

    [root@myfuture ~]# df -h | awk '{print $1 "	" $3}'
    Filesystem    Used
    /dev/mapper/vg_myfuture-lv_root    
    18G    13G
    tmpfs    228K
    /dev/sda1    29M
    /dev/sr0    4.4G

    而cut却无法实现

    [root@myfuture ~]# df -h | cut -f 1,3
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/mapper/vg_myfuture-lv_root
                           18G  3.7G   13G  23% /
    tmpfs                 491M  228K  491M   1% /dev/shm
    /dev/sda1             477M   29M  424M   7% /boot
    /dev/sr0              4.4G  4.4G     0 100% /media/CentOS_6.6_Final

    3.获取/dev/sda1的使用情况:

    [root@myfuture ~]# df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f 1
    7

    4.BEGIN关系表达式,只有先满足关系表达式后,才能继续动作。

    [root@myfuture ~]# awk 'BEGIN{print "this is a test"}{print $2 "	" $4}' student.txt 
    this is a test
    Name    Mark
    furong    85
    fengj    60
    cang    70

    5.END会在所有的输入都被处理完后进行匹配。

    [root@myfuture ~]# awk 'END{print "this is a test"}{print $2 "	" $4}' student.txt 
    Name    Mark
    furong    85
    fengj    60
    cang    70
    this is a test

    6.提取用户名与ID

    [root@myfuture ~]# cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "	" $3}'
    root    0
    zabbix    500
    hadoop    501
    user1    502

    7.提取分数大于70的人名

    [root@myfuture ~]# cat student.txt | grep -v Name | awk '$4>=70 {print $2}'
    furong
    cang

    8.awk默认以空格为分隔符,需用awk中的'-F'标志指定你的分隔符

    [root@myfuture ~]#  echo 'one mississippi,two mississippi,three mississippi,four mississippi' | awk -F , '{print $4}' 
    four mississippi

    9.只要最后字段。 awk中内置的$NF变量代表字段的数量,这样你就可以用它来抓取最后一个元素:

    echo 'one two three four' | awk '{print $NF}' 

    倒数第二个字段:

    [root@myfuture ~]# cat student.txt | awk '{print $(NF-1)}'
    gender
    F
    F
    F

    中间字段:

    [root@myfuture ~]# cat student.txt | awk '{print $((NF/2)+1)}'
    gender
    F
    F
    F

    10.awk的跨行状态

    [root@myfuture ~]# echo -e 'one 1
    two 2' | awk '{sum+=$2} END {print sum}'
    3
  • 相关阅读:
    网络爬虫之框架(Scrapy)
    模拟投币试验
    [LeetCode#177]Nth Highest Salary
    Windows Server 2008 各版本功能差异与比较各版本概观--转载
    Win2008 R2下Server Core常用命令小结
    powershell 中用Sqlps管理我台sqlserver 2008r2
    初识 Markdown
    React 入门(3): 严格模式 ReactDOM
    ES6 类的正确定义方式 公有类字段 getter / setter
    Lodash 去抖动 节流
  • 原文地址:https://www.cnblogs.com/XYJK1002/p/5329782.html
Copyright © 2011-2022 走看看