美文网首页
shell awk 命令

shell awk 命令

作者: 衣介书生 | 来源:发表于2020-03-07 15:47 被阅读0次

    awk的最基本功能是在文件或者字符串抽取信息。通常awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本,几个常用的参数和命令。

    // test.txt
    aaa 10 20
    bbb 20 30
    aaa 30 10
    ccc 40 5
    ccc 20 10
    ccc 40 6
    

    第二列求和:

    cat test.txt | awk '{sum += $2};END {print sum}'
    

    第二列为值,第一列为 key,求每个 key 对应的所有值的和:

    cat test.txt | awk '{sum[$1]+=$2} END {for(i in sum) print i,sum[i]}'
    
    ccc 100
    bbb 20
    aaa 40
    

    统计第一列的元素分别出现了几次:

    cat test.txt |awk '{sum[$1]+=1}END{for(i in sum)print i,sum[i]}'
    
    ccc 3
    bbb 1
    aaa 2
    

    统计前两列元素出现的次数:

    cat test.txt |awk '{sum[$1" "$2]++}END{for(i in sum)print i,sum[i]}'
    
    bbb 20 1
    aaa 10 1
    ccc 20 1
    aaa 30 1
    ccc 40 2
    

    打印文件名,每行的行号,每行的列数,对应的完整内容:

    • -F指定分隔符
    • FILENAME:文件名
    • NR:每行的行号
    • NF:每行的列数
    • 0: 变量是指整条记录。1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
    awk  -F ' '  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' test.txt
    
    filename:test.txt,linenumber:1,columns:3,linecontent:aaa 10 20
    filename:test.txt,linenumber:2,columns:3,linecontent:bbb 20 30
    filename:test.txt,linenumber:3,columns:3,linecontent:aaa 30 10
    filename:test.txt,linenumber:4,columns:3,linecontent:ccc 40 5
    filename:test.txt,linenumber:5,columns:3,linecontent:ccc 20 10
    filename:test.txt,linenumber:6,columns:3,linecontent:ccc 40 6
    

    打印第一列,最后一列,倒数第二列,第二行:

    awk -F " " '{print $1}' test.txt
    awk -F " " '{print $NF}' test.txt
    awk -F " " '{print $NF-1}' test.txt
    awk -F " " 'NR==2 {print "filename:" FILENAME " content:" $0}' test.txt
    
    aaa
    bbb
    aaa
    ccc
    ccc
    ccc
    
    20
    30
    10
    5
    10
    
    19
    29
    9
    4
    9
    5
    
    filename:test.txt content:bbb 20 30
    

    相关文章

      网友评论

          本文标题:shell awk 命令

          本文链接:https://www.haomeiwen.com/subject/giccdhtx.html