首页 > 其他 > 详细

awk 概述及常用方法总结

时间:2019-07-08 00:44:38      阅读:133      评论:0      收藏:0      [点我收藏+]

awk 简介

awk是一个文本处理工具,通常用于处理数据并生成结果报告,

awk的命名是它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母组成的。

awk的工作模式

技术分享图片

 

语法格式

 

第一种形式: 基于文件

awk ‘BEGIN{}pattern{commands}END{}‘ file_name

  

第二种形式: 基于标准命令格式

standard output | awk ‘BEGIN{}pattern{commands}END{}‘

 

语法格式说明

 技术分享图片

 

awk的内置变量

内置变量对照表

技术分享图片

技术分享图片

 

    内置变量:
        $0                    打印行所有信息
        $1~$n                    打印行的第1到n个字段信息
        NF Number Field                处理行的字段个数
        NR Number Row                处理行的行号
        FNR File Number Row            多文件处理时,每个文件单独记录行号
        FS Field Separator            字段分隔符,不指定时默认以空格或tab键分割
        RS Row Separator            行分隔符,不指定时以回车换行分割
        OFS Output Filed Separator        输出字段分隔符
        ORS Output Row Separator        输出行分隔符
        FILENAME                处理文件的文件名
        ARGC                    命令行参数个数
        ARGV                    命令行参数数组

  

输出整行数据

awk ‘{print $0}‘ passwd 

技术分享图片

 

FS指定分隔符为 : 输出所有行第一个字段

awk ‘BEGIN{FS=":"}{print $1}‘ passwd

技术分享图片

 

默认以空格或者tab为分隔符

list

Hadoop Spark Flume
Java Python Scala
Allen Mike Meggie

  

以空格为分隔符, 输出第一个字段

awk ‘BEGIN{FS=" "}{print $1}‘ list

技术分享图片

 

 NF 输出每一行的字段个数

awk ‘{print NF}‘ list

技术分享图片

 

NR 输出行号,处理多个文件(list,passwd,/etc/fstab) 时行号累加

awk ‘{print NR}‘ list passwd /etc/fstab

  

技术分享图片

 

FNR在处理两个文件以上时会单独计数

awk ‘{print FNR}‘ list /etc/fstab

  

技术分享图片

 

list

Hadoop|Spark:Flume
Java|Python:Scala:Golang
Allen|Mike:Meggie

 

  |  符号分隔列, 输出第二个字段  

技术分享图片

 

以 : 符号分隔列

awk ‘BEGIN{FS=":"}{print $2}‘ list

 

技术分享图片

 

list

Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie

  

RS 指定行分隔符: --

awk ‘BEGIN{RS="--"}{print $0}‘ list

技术分享图片

 

awk ‘BEGIN{RS="--";FS="|"}{print $3}‘ list 

技术分享图片

 

ORS输出分隔符,以&连接各输出行

awk ‘BEGIN{RS="--";FS="|";ORS="&"}{print $3}‘ list

技术分享图片

 

字段默认分隔符是空格

awk ‘BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}‘ list

技术分享图片

 

OFS 指定字段分隔符为 :

awk ‘BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}‘ list

技术分享图片

 

FILENAME 文件名

awk ‘{print FILENAME}‘ list

技术分享图片

 

list

Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
Test File
Line

 

输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出

awk ‘{print FILENAME}‘ list

  

技术分享图片

 

ARGC命令行参数个数  awk 和 list 共链各个参数

awk ‘{print ARGC}‘ list

技术分享图片

 

awk ‘{print ARGC}‘ list /etc/fstab  这样的话就是 3 个参数

技术分享图片

 

NF表示字段个数,NF=7 $NF表示字段的个数一般来显示最后一个字段

awk ‘BEGIN{FS=":"}{print $NF}‘ passwd 

  

技术分享图片

 

 

awk 格式化输出 printf

 

awk 概述及常用方法总结

原文:https://www.cnblogs.com/crazymagic/p/11148894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!