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 {}中还可使用循环语句,判断语句等

     

     

  • 相关阅读:
    【LeetCode OJ】Longest Substring Without Repeating Characters
    JavaScript学习笔记一
    Struts2(五)数据校验
    Struts2(四)属性驱动和模型驱动
    php知识大集合(自用)
    正则表达式匹配非需要匹配的字符串(标题自己都绕晕了)
    php中ereg() ,preg_match() 与preg_match_all的区别?代码详细比较
    linux 查询当前文件夹下的目录数量
    linux 下如何查看mysql跑了哪些服务
    mysql同主机下 复制一个数据库所有文件到另一个数据库
  • 原文地址:https://www.cnblogs.com/shouke/p/10157828.html
Copyright © 2011-2022 走看看