• Linux之awk使用


    基本语法

    • $n :当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段
    • $0:执行过程中当前行的文本内容
    • :制表符
    • :换行符
    • -F'[:#/]' : 定义三个分隔符,注意有-F和无-F的区别,无-F直接用空格作为分隔符
    • BEGIN: 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
    • END:结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
    • 一行一行输出file中内容:
    awk '{print}'  file
    
    • 输出相同个数的a行,一行只有一个a:
    awk '{print "a"}'  file
    
    • 将每一行的第一个字段和a,分行输出:
    awk -F: '{print $1; print "a"}'  file
    
    • 输出每一行的第一个字段后直接输出a,不换行:
    awk -F: '{print $1; print "a"}'  file
    
    • 输出行号:
    awk '{print NR,$0}' result
    
    • 显示第五行:
    awk -F: 'NR==5{print}' result
    
    • 每隔五行显示:
    awk -F: 'NR%5==1{print}' result
    
    • 显示第一个元素是开始时右端项非零元的第二个元素
    awk '{if($1=="开始时右端项非零元:"){printf $2 "	 ";}}' result
    

    统计文本信息

    要统计的文本信息存在grade.txt中

    Marry   2143 78 84 77
    Jack    2321 66 78 45
    Tom     2122 48 77 71
    Mike    2537 87 97 95
    Bob     2415 40 57 62
    

    则统计代码如下:

    awk 'BEGIN{math=0;eng=0;com=0;printf "Lineno.   Name    No.    Math   English   Computer    Total
    ";printf "------------------------------------------------------------
    "}{math+=$3; eng+=$4; com+=$5;printf "%-8s %-7s %-7s %-7s %-9s %-10s %-7s 
    ",NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf "------------------------------------------------------------
    ";printf "%-24s %-7s %-9s %-20s 
    ","Total:",math,eng,com;printf "%-24s %-7s %-9s %-20s 
    ","Avg:",math/NR,eng/NR,com/NR}'  grade.txt
    

    例子2

    #!/bin/bash
    dir=./data/KnapsepInstances/KnapsepInstances/CNLP
    rm 1.out
    for file in $dir/*.lp
    do
       filename=$(basename $file .lp)
       echo $file
       ./bin/main $file > temp
       awk -F" " '{if($2=="name:"){print$3}}' temp >>1.out
       awk -F" " '{if($1=="LIFT"){print"LIFT time: "$4}}' temp >>1.out
       awk -F" " '{if($1=="nodes"){print"Nodes: "$3}}' temp >>1.out
    done
    
  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/qujingtongxiao/p/10114966.html
Copyright © 2020-2023  润新知