awk常用命令

作者: KN郑某某 | 来源:发表于2019-10-29 17:13 被阅读0次

    1. 准备文件

    准备文件test.log,内容如下。三项分别是:日期项目版本号

    '2019年06月05日10:03:13' aaa                   0e604b6b7fa0a5610c96aee0a8407d9b89b6732a
    '2019年06月25日15:14:36' bbb                   e5fa8f4d2b08867df8cf47e6f8a2bb269043c7cb
    '2019年06月28日16:47:27' bbb                   0727437c9e4d52ce0fcdb5276d6507d1c6ad5d65
    '2019年07月16日14:53:51' ccc                   972b9389fc25e8cef21377967961a43275d8f136
    '2019年10月29日11:21:42' aaa                   4fae5956698f1cc5b223957cf7197b826faa7fef
    '2019年10月29日11:33:38' bbb                   08ba46a814eae69d37b90f2d075eb27ce62bb07f
    

    2. 基本打印

    • 打印第一列
    $ awk '{print $1}' test.log
    
    • 打印整行
    $ awk '{print $0}' test.log
    

    内置参数

    NR:行号
    NF:总列数
    $0:整行
    $1-n:代表列序 , $1第一列,$n第n列

    • 指定分割符

    默认按空格或TAB分割, 可以自定义,例如使用#作为分割符

    $ awk -F '#' '{print $3}' test.log
    

    3. 示例

    awk 命令默认是按行扫描的,如果需要扫描的前后执行一些逻辑,可以按照以下的代码结构设置。

    awk 'BEGIN {之前的逻辑} {中间的扫描逻辑} END {之后的逻辑}' test.log
    
    • 脚本文件

    可以将执行程序写到文件里面,执行时设置执行脚本文件。例如脚本文件是scriptfile,执行如下

    $ awk -f scriptfile test.log
    
    • 去重

    删除示例文件中重复的项目,保留最后一条

    $ awk '{ line[$2] = $0 } END { for (key in line) { print line[key] } }' test.log
    

    可以按照时间排序以下,用到 sort命令, -k1参数表示按照第一列排序。这里的变量line类似map,遍历输出。

    $ awk '{ line[$2] = $0 } END { for (key in line) { print line[key] } }' test.log | sort -k1
    
    • 逆序输出
    $ awk '{ line[NR] = $0 } END { for (i = NR; i > 0; --i) print line[i] }' test.log
    
    • 输出分割符

    在BEGIN初始化内置的分割符,之后再打印

    $ awk 'BEGIN {OFS="#"} {print $1,$2,$3}' test.log
    

    打印结果

    '2019年06月05日10:03:13'#aaa#0e604b6b7fa0a5610c96aee0a8407d9b89b6732a
    '2019年06月25日15:14:36'#bbb#e5fa8f4d2b08867df8cf47e6f8a2bb269043c7cb
    '2019年06月28日16:47:27'#bbb#0727437c9e4d52ce0fcdb5276d6507d1c6ad5d65
    '2019年07月16日14:53:51'#ccc#972b9389fc25e8cef21377967961a43275d8f136
    '2019年10月29日11:21:42'#aaa#4fae5956698f1cc5b223957cf7197b826faa7fef
    '2019年10月29日11:33:38'#bbb#08ba46a814eae69d37b90f2d075eb27ce62bb07f
    

    相关文章

      网友评论

        本文标题:awk常用命令

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