• 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
    

      

  • 相关阅读:
    Vue部署到nginx刷新后出现404页面的问题
    移动端rem布局方案
    Vue使用Mint-ui的Popup, Picker组件报错问题
    Vue稍微高级一点的选项卡—动态组件
    GMOJ 1283排列统计 题解
    GMOJ 1281旅行 题解
    Why Did the Cow Cross the Road I P 题解
    【USACO 2017 December Gold】A Pie for a Pie 题解
    2020.05.23【NOIP提高组】模拟 总结
    2020.05.03【NOIP提高组】模拟 总结
  • 原文地址:https://www.cnblogs.com/leyi/p/12621188.html
Copyright © 2020-2023  润新知