• #每日Linux小练习#05 awk-好用的数据处理工具


    awk是数据处理工具。相比如sed常作用于一整行的处理,awk则倾向于将一行分为数个“字段”来处理。

    因此,awk适合处理小型的数据。

    awk的基本模式如下:

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

    首先,看一段基本的代码

    echo "basis exmaple pf awk"
    echo "**************************"
    echo "before awk###############"
    last -n 5
    echo "after awk################"
    last -n 5 | awk '{print $1 "	" $3}'

    1、awk默认使用空格或者[tab]键来分隔,分别储存在$1、$2、$3。。。中,$0代表一整行

    awk有一些内置变量

    内置变量名称 代表意义
    NF 每一行拥有的字段总数(多少列)
    NR 目前awk处理的是“第几行”的数据
    FS 目前的分隔符,默认是空格或者[Tab]
    echo " "
    echo " "
    echo "change FS"
    echo "**************************"
    cat /etc/passwd | awk '{FS=":"}  $3< 10 {print $1 "	" $2 "	" $3}'
    echo " "
    echo "add BEGIN"
    cat /etc/passwd | awk ' BEGIN {FS=":"}  $3< 10 {print $1 "	" $2 "	" $3}'
    echo "add BEGIN"
    cat /etc/passwd | awk ' BEGIN {FS=":"}  $3< 10 {print $1 "	" $2 "	" $3 "	lines:" NR "	 columes" NF}'

    1、执行第一个动作  {FS=":"} 将分隔符改为:

    2、分隔符不会立即生效,需要到第二行才能生效,所以增加BEGIN关键词,这样第一行也能生效

    echo " "
    echo " "
    echo "calculate"
    echo "**************************"
    echo -e "Name 	 1st 	 2nd 	 3th" > ./material/20150807awk_pay.txt
    echo -e "Liu 	 26 	 200 	 300" >> ./material/20150807awk_pay.txt
    echo -e "Wu 		 24 	 210 	 310" >> ./material/20150807awk_pay.txt
    echo -e "Chen 	 24 	 220 	 320" >> ./material/20150807awk_pay.txt
    echo -e "Zhong 	 25 	 230 	 330" >> ./material/20150807awk_pay.txt
    
    cat ./material/20150807awk_pay.txt | 
    awk 'NR==1 {printf "%10s %10s %10s %10s %10s
    ",$1,$2,$3,$4,"Total"}  #第一个动作
    NR>=2 {total= $2 + $3 + $4                           #第二个动作
    printf "%10s %10d %10d %10d %10.2f
    ",$1,$2,$3,$4,total}'

    1、echo -e " "可以将tab键打印出来,如果是 echo " ",打印出来的是 这两个字符

    2、这个实例中,存在不同的判断条件,然后紧跟着对应的动作。如果需要多个命名辅助,可利用分号或者[Enter]来分隔命令

    3、与bash,shell的变量不同,在awk中,变量可以直接使用(如最后一句的total),不需要加上$符号

  • 相关阅读:
    [CSP-S模拟测试]:影子(并查集+LCA)
    [CSP-S模拟测试]:夜鹰与玫瑰(数学)
    [CSP-S模拟测试]:抛硬币(DP)
    [CSP-S模拟测试]:影魔(树状数组+线段树合并)
    [CSP-S模拟测试]:队长快跑(DP+离散化+线段树)
    [CSP-S模拟测试]:玄学题/c(数学)
    [CSP-S模拟测试]:卡常题/b(基环树+DP)
    [CSP-S模拟测试]:工业题/a(数学)
    BZOJ5297 [Cqoi2018]社交网络 【矩阵树定理】
    BZOJ5300 [Cqoi2018]九连环 【dp + 高精】
  • 原文地址:https://www.cnblogs.com/wuqi/p/4712623.html
Copyright © 2020-2023  润新知