zoukankan      html  css  js  c++  java
  • Linux awk命令常见使用方法介绍

    Linux awk命令常见使用方法介绍

    By:授客 QQ1033553122

     

    awk运行方式有三种,其中常用的为命令行方式

    awk [-F  field_separator]  '{pattern + action}'  input_file(s)

    其中,其中 pattern 表示awk需要查找的内容,由符号//包围,形如 /^shouke/,而 action 是在找到匹配内容时所执行的一系列命令,[-F field_separator]可选,input-file(s) 是待处理的文件。

     

    通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令来处理文本。

     

    awk中,文件的每一行中,由域分隔符(field_separator,默认为空格)分开的每一项称为一个域。

     

    [root@localhost ~]# touch testfile

    [root@localhost ~]# vim testfile

    id   name         sex      addr        hobby

    1    name:shouke  sex:   addr:深圳   hobby:music

    2    name:laiyu   sex:   addr:云南   hobby:none

     

    例子1:不指定分割符,从文件读取数据(awk '{action}'  input_file(s)

    [root@localhost ~]# awk '{print $1, $2}' testfile

    id name

    1 name:shouke

    2 name:laiyu

     

    说明:awk工作流程是这样的:读入由换行符' '分割的一条记录,然后将记录按指定的域分隔符划分域,填充域($0则表示所有域,$1表示第一个域,$n表示第n个域),接着读取下一条记录,重复前面的操作。默认域分隔符是"空白键" "tab"

     

    例子2:指定分隔符,从文件读取数据(awk -F  field_separator '{action}'  input_file(s)

    [root@localhost ~]# awk -F ':' '{print $1, $2}' testfile

    id   name         sex      addr        hobby

    1    name shouke  sex

    2    name laiyu   sex

     

    例子3:从命令输出结果读取数据

    [root@localhost ~]# cat testfile | awk '{print $2, $3}'

    name sex

    name:shouke sex:

    name:laiyu sex:

     

    例子4:格式化输出

    [root@localhost ~]# cat testfile | awk '{print $2" "$3}'

    name    sex

    name:shouke sex:

    name:laiyu  sex:

     

    例子5: 指定初始操作和结尾操作

    [root@localhost ~]# cat testfile | awk 'BEGIN {print "first"} {print $2,$3} END {print "finally"}'

    first

    name sex

    name:shouke sex:

    name:laiyu sex:

    finally

     

    例子6:指定pattern模式(awk [-F  field_separator]  '{pattern}'  input_file(s)

    [root@localhost ~]# cat testfile | awk '/laiyu/'

    2    name:laiyu   sex:   addr:云南   hobby:none 

    说明:

    1.例子为搜索文件中所有包含pattern即字符串“laiyu”的行记录,仅匹配了pattern(例中为laiyu)的行才会执行action(这里没有指定action,默认输出每行的内容)

    2.搜索支持正则,例如找laiyu开头的: cat testfile | awk '/^laiyu/'

     

    7:指定pattern+action模式(awk [-F  field_separator]  '{pattern+action}'  input_file(s) [root@localhost ~]# cat testfile | awk '/laiyu/{print $2, $3}'

    name:laiyu sex:

     

    8printf格式化输出

    [root@localhost home]# cat testfile | awk '{print $2}' | awk -F ':' '{printf("newname:%5s, oldname:%5s ", $2, $2)}'

    newname:     , oldname:    

    newname:shouke, oldname:shouke

    newname:laiyu, oldname:laiyu

    newname:     , oldname:    

     

    9:自定义变量

    [root@localhost home]# cat testfile | awk 'BEGIN {num=0;}{num=num+1;} END{print "rows of record have been read is: " num}'

    rows of record have been read is: 4

     

    说明:例中自定义了一个变量:num,初始值为0action{}中可以有多条语句,每条以;号隔开。

     

    10:使用内置变量

    [root@localhost home]# cat testfile | awk '{print "rows of record have been read is: " NR}'

    rows of record have been read is: 1

    rows of record have been read is: 2

    rows of record have been read is: 3

    rows of record have been read is: 4

    说明:处理$0等变量,awk还有其它内置变量,比如 NR--读取的记录数,FILENAME--awk浏览的文件名

    除此之外,action {}中还可使用循环语句,判断语句等

     

     

  • 相关阅读:
    graphics.drawRect()坐标解释
    点击上、下一页显示图片
    [笔记] systemverilog学习笔录
    [转帖]Verilog的语法及generate使用
    [笔记]ALTLVDS_TX和ALTLVDS_RX及Modelsim使用技巧
    [转帖]Quartus II中FPGA的管脚分配保存方法
    [笔记]8组LVDS_TX和LVDS_RX的调试心得
    [笔记]Altera中FIFO
    [笔记] 输入信号的边沿检测
    [笔记]systemverilog书本推荐
  • 原文地址:https://www.cnblogs.com/shouke/p/10157828.html
Copyright © 2011-2022 走看看