zoukankan      html  css  js  c++  java
  • awk笔记备忘

    awk pattern { action } {filenames}
    
    # $0变量是指整条记录,$1表示当前行的第一个域,$2表示当前行的第二个域,$n当前记录的第n个域,字段间由FS分隔, 每行按 FS 字段分隔符(默认是空格或tab)
    # cat 1.txt
    Beth    4.00    0
    Dan     3.75    0
    kathy   4.00    10
    Mark    5.00    20
    Mary    5.50    22
    Susie   4.25    18
    
    # 输出文本中的1、3列
     awk '{print $1,$3}’ 1.txt 
    
    Beth 0
    Dan 0
    kathy 10
    Mark 20
    Mary 22
    Susie 18
    
    # $NF是number finally,表示最后一列的信息
    awk '{print $NF}' 1.txt
    
    0
    0
    10
    20
    22
    18
    
    # 筛选 第三列等于0的第一列的值
    awk  '$3 == 0 {print $1}' 1.txt
    Beth
    Dan
    
    
    # -F 指定输入文件折分隔符
    cat 2.txt
    # 2.txt
    Beth:4.00:0
    
    awk -F ':' '{print $2}' 2.txt
    4.00
    
    # 打印出每行的行号NR代表行号
    awk  '{print "我是行号",NR,$0}' 1.txt
    
    我是行号 1 Beth 4.00    0
    我是行号 2 Dan  3.75    0
    我是行号 3 kathy        4.00    10
    我是行号 4 Mark 5.00    20
    我是行号 5 Mary 5.50    22
    我是行号 6 Susie        4.25    18
    
    # BEGIN 和 END  
    # BEGIN 用于匹配第一个输入文件的第一行之前的位置, END 则用于匹配处理过的最后一个文# 件的最后一行之后的位置
    awk 'BEGIN { print "标题一标题二 标题三"; print "-------------------"} { print}' 1.txt
    
    标题一标题二 标题三
    -------------------
    Beth    4.00    0
    Dan     3.75    0
    kathy   4.00    10
    Mark    5.00    20
    Mary    5.50    22
    Susie   4.25    18
    
    # 打印最后一行 等同于  tail -n 1 1.txt  等同于  sed -n '$p' 1.txt
    
    awk 'END { print $0}' 1.txt
    
    Susie   4.25    18
    
    # 设置变量
    awk '{tail=($1 "~~~~~")} {print tail}' 1.txt
    
    Beth~~~~~
    Dan~~~~~
    kathy~~~~~
    Mark~~~~~
    Mary~~~~~
    Susie~~~~~
    
    # for循环 每行打印2遍
    awk '{for(i=0; i < 2; i++) print $0}' 1.txt
    
    Beth    4.00    0
    Beth    4.00    0
    Dan     3.75    0
    Dan     3.75    0
    kathy   4.00    10
    kathy   4.00    10
    Mark    5.00    20
    Mark    5.00    20
    Mary    5.50    22
    Mary    5.50    22
    Susie   4.25    18
    Susie   4.25    18
    
    # 逆序打印
    awk '{arr[NR] = $0 }END{for(i = NR;i >0;i --) print arr[i]}' 1.txt
    
    Susie   4.25    18
    Mary    5.50    22
    Mark    5.00    20
    kathy   4.00    10
    Dan     3.75    0
    Beth    4.00    0
    
    # 去重复行
    awk '!($0 in x){x[$0];print $0 }' 1.txt
    
    # 其他:
    https://www.gnu.org/software/gawk/manual/gawk.html#Advanced-Features
    

      

  • 相关阅读:
    FreeRTOS之源码 及 移植详解
    FreeRTOS之Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)
    FreeRTOS之全配置项详解、裁剪(FreeRTOSConfig.h)
    linux下安装oracle中遇到的一些问题
    RedHat Enterprise Linux 6 配置Xmanager ,实现图形界面连接
    Linux ext2/ext3文件系统详解
    对固态硬盘ssd进行4k对齐
    在CentOs6.5安装jdk
    Android的API版本和名称对应关系
    Java反射机制及Method.invoke详解
  • 原文地址:https://www.cnblogs.com/leyi/p/12621188.html
Copyright © 2011-2022 走看看