• awk用法记录


    awk 简介

    awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。
    awk的处理文本和数据的方式:逐行扫描文件,默认从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
    awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger
    gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
    下面介绍的awk是以GNU的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍

    User’s Guide 站点: https://www.gnu.org/software/gawk/manual/gawk.html

    使用

    命令模式

    awk [options] 'commands' file(s)
    	option 部分
    		-F 定义字段分割符号,默认的分隔符是空格
    		-v 定义变量并赋值
     
    	command 部分:
    	'范围说明或正则表达式或者{awk命令语句1;awk命令语句2;...}'
     
    	'BEGIN{} {}         END{}'
    	 行处理前      行处理 	行处理后
     
    	1、范围说明部分可以是BEGIN、END、逻辑表达式或者为空
    	2、awk命令语句间用分号间隔
    	3、引用shell变量需用双引号引起
     
    # 举例:
    awk '/root/' /etc/passwd
    awk 'NR==1' /etc/passwd
    awk 'NR==1{print $1}' /etc/passwd
    
    

    脚本模式

    awk [options] -f scriptfile file(s)
    特点:
    1、awk脚本是awk命令的清单
    2、命令需要用分号间隔
    3、#号开头的是注释行
    4、#!/bin/awk -f 
    

    工作原理

    # awk -F: '{print $1,$3}' /etc/passwd
    (1)awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束
    
    (2)然后,行被:(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始。
    
    (3)awk如何知道用空格来分隔字段的呢? 因为有一个内部变量FS来确定字段分隔符。初始时,FS赋为空格
    
    (4)awk打印字段时,将以设置的方法使用print函数打印,awk在打印的字段间加上空格,因为$1,$3之间
    有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格
    
    (5)awk输出之后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔
    成字段并进行处理。该过程将持续到所有行处理完毕
    

    基本应用

    $0	:表示当前所有记录
    $1,$2,$3...$n:awk中用该顺序形式表示files中每行以间隔符号分割的各列的不同字段
    注:
    awk默认以空格符为间隔符号将每行分割为单独的字段,也可以使用awk内置变量FS定义间隔符号
    # awk -F: '{print $1,$7}' a.txt
    # awk 'BEGIN{FS=":"} {print $1,$7}' a.txt
     
    NF  		表示当前记录的字段数(列数)
    $NF		最后一列
    $(NF-1)	倒数第二列
    FNR/NR	行号
    FILENAME 文件名
    "	"		制表符
    "
    "		换行符
    ""			打印字符串
    FS 		    定义间隔符,命令里定义。如‘BEGIN{FS=":"}’
    OFS  		定义"输出字段"的分隔符,默认是空格
    RS			输入记录分割符,默认换行(即
    )
    ORS		    输出记录分割符,默认换行(即
    )
    print 	    打印函数
     
    awk -F: 'NR==2{print $1,$(NF-1)}'
     
    格式化输出:
    print函数		类似echo
    # date |awk '{print "Month: "$2 "
    Year: "$NF}'
    # awk -F: '{print "username is: " $1 "	 uid is: "$3}' /etc/passwd
     
     
    printf函数		类似echo -n
    # awk -F: '{printf "%-15s %-10s %-15s
    ", $1,$2,$3}'  /etc/passwd
    # awk -F: '{printf "|%15s| %10s| %15s|
    ", $1,$2,$3}' /etc/passwd
    # awk -F: '{printf "|%-15s| %-10s| %-15s|
    ", $1,$2,$3}' /etc/passwd
     
    %s 字符类型
    %d 数值类型
    占15字符
    - 表示左对齐,默认是右对齐
    
  • 相关阅读:
    第 1 章 代码无错便是优?——简单工厂模式
    [转载]由浅入深探究mysql索引结构原理、性能分析与优化
    jquery中 $.expr使用实例介绍
    jQuery UI Widget(1.8.1)工作原理
    asp.net url重写
    CJL.0.1.js
    React Context 的用法
    小程序组件使用
    深入理解es5中Object.defineProperty()
    React合成事件
  • 原文地址:https://www.cnblogs.com/CoolMark-blog/p/12237098.html
Copyright © 2020-2023  润新知