Linux | awk 命令「建议收藏」

Linux | awk 命令「建议收藏」awk命令简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得非常强大,awk其实是一门语言,”格式扫描和处理语言“,它允许您创建

大家好,又见面了,我是你们的朋友全栈君。

awk 命令简介

awk 是一个强大的文本分析工具,相对于grep 的查找,sed的编辑,awk 在其对数据分析并生成报告时,显得非常强大,awk 其实是一门语言,”格式扫描和处理语言“,它允许您创建简短的程序,这些程序读取输入文件 ,为数据排序,处理数据,对输入执行计算以及生成报表等。

awk 命令格式

  • 命令行方式
	awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
  • shell 脚本

  • akw文件

	awk -f awk-script-file input-file(s)

awk 选项参数

参数 说明
-F 指定输入文本的分隔符,字符串或者是一个正则表达式
-v 定义一个用户自定义变量
-f 从指定的文件中读取 awk 命令
-W 打印简短的版权信息 或 打印关于不能向伟统unix平台移植的结构

image-20210907112547902

last 命令用于查询最后登录的5个用户及详情 -n 5 是取最后两个

如果我们只想取登录的用户,使用awk最简单:

	last -n 5 | awk '{print $1}'

image-20210907112941632

	# 也可以取 1 ,3 列
	last -n 5 | awk '{print $1,$3}'
	# awk 命令中列是从1开始取的,所以 $0 代表的是这一行
	last -n 5 | awk '{print $0}' # 和 last -n 5 输出相同 

-F 的使用

这里使用的例子是var/log/yum.log、文件中的内容,在我们平时,也有处理日志的需求,所以使用 awk会更加的方便。

image-20210907130945636

	# 如果我们想要得到所有安装和更新的软件列表
	cat yum.log | awk -F: '{print $4,$5}'

image-20210907131231137

-F 可以使用任意字符充当分割符号

-v 的使用

创建测试文本:awk_test.txt 内容为:

image-20210907132641665

可以使用 awk 对变量进行赋值,然后使用变量批量计算每一行的数据。

cat awk_test.txt | awk -v a=1 '{print $1 + a}'

image-20210907133357171

结果和上面文件中的内容有一点差别,是因为最后一行其实是一个空行,但是在进行加法的时候,这一行也加上了1,但是不是按照数字的加减法的,是按照拼接。

awk 内建变量

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出字段分隔符,默认值与输入字段分隔符一致。
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)

内建变量的使用

    awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt

    FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
    ---------------------------------------------
    log.txt    2    1         5    1
    log.txt    2    2         5    2
    log.txt    2    3         3    3
    log.txt    2    4         4    4
    awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt

    FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
    ---------------------------------------------
    log.txt    2    1    '    1    1
    log.txt    2    2    '    1    2
    log.txt    2    3    '    2    3
    log.txt    2    4    '    1    4
    # 输出顺序号 NR, 匹配文本行号
    awk '{print NR,FNR,$1,$2,$3}' log.txt

    1 1 2 this is
    2 2 3 Are you
    3 3 This's a test
    4 4 10 There are
    # 指定输出分割符
    $  awk '{print $1,$2,$5}' OFS=" $ "  log.txt
    ---------------------------------------------
    2 $ this $ test
    3 $ Are $ awk
    This's $ a $
    10 $ There $

awk 使用正则表达式

使用正则,字符串匹配

    # 输出第二列包含 "th",并打印第二列与第四列
    awk '$2 ~ /th/ {print $2,$4}' log.txt
    this a

~ 表示模式开始。// 中是模式。

    # 输出包含 "re" 的行
    awk '/re/ ' log.txt
    3 Are you like awk
    10 There are orange,apple,mongo

忽略大小写

    awk 'BEGIN{IGNORECASE=1} /this/' log.txt
    2 this is a test
    This's a test

模式取反

    awk '$2 !~ /th/ {print $2,$4}' log.txt
    Are like
    a
    There orange,apple,mongo
    awk '!/th/ {print $2,$4}' log.txt
    Are like
    a
    There orange,apple,mongo

我的公众号

Linux | awk 命令「建议收藏」


细节决定成败!
个人愚见,如有不对,恳请斧正!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154928.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C# 定时执行方法

    C# 定时执行方法定时执行某个方法privatevoidbutton1_Click(objectsender,EventArgse){System.Timers.Timertimer=newSystem.Timers.Timer();timer.Enabled=true;timer.Inter…

    2022年7月17日
    17
  • 阿里云服务器搭建及项目部署过程—小白篇

    阿里云服务器搭建及项目部署过程—小白篇最近学习了前后端的相关技术,就想租一个服务器试一下,玩一玩,简单了解了一下阿里云的服务器,简单介绍一下:一:什么是云服务器ECS是阿里云产品体系中,最基础的计算服务,通常用作应用程序的运行环境,最重要的特点是弹性。二:基础运行环境用户的应用程序运行在实例的操作系统上三:特点弹性:容量不够可以直接在云服务器上扩展配置,只要直接补差价成本:0运维,支持包年包月或按量计费…

    2022年6月23日
    45
  • JWPlayer_nplayer浏览器

    JWPlayer_nplayer浏览器网盘:https://pan.baidu.com/s/1mmtppZSFOni5tLI2TJWKrw<scripttype=”text/javascript”>varthePlayer;//保存当前播放器以便操作$(function(){thePlayer=jwplayer(‘container’).setu…

    2022年10月8日
    2
  • 玩转挖矿:家庭矿机组装全攻略!

    玩转挖矿:家庭矿机组装全攻略!离上次发挖矿的教程已经过去两个多月了。这两个多月发生了什么事情呢?特斯拉买入15亿美刀BTC美图也不修图买BTC和ETH去了美国一大波ETF申请中加密币交易所coinbase快要上市了20多万一枚的比特币冲到了40万2100一张的二手1660s涨到4000多了…..这段时间我也没有闲着,断断续续收了十几张卡,装了三台矿机。趁着第一波投入已经回本的好心情,给大家分享一下装显卡矿机的经验。(不做投资建议,不送显卡,要不要高位站岗完全看你们自己!)我本来是没时间来.

    2025年8月22日
    4
  • 有哪些顶级水平的中国程序员?[通俗易懂]

    有哪些顶级水平的中国程序员?[通俗易懂]本文转载自启舰杂谈我们熟知的很多程序员都是国外的。那我们中国有没有顶尖级的程序员,出于好奇,我全网进行了搜罗,这里把我认为比较厉害的一些程序员展示给大家。篇幅有限,很多程序员我也没听过,所以就没有展示。排名顺序也没什么特别的,先看上谁,谁就排第一。比如,第一的尤雨溪单纯就是因为他长的帅如果你认为还有哪位大咖是你心目中的神,可以列出来,如果列的人多的话,我再搞一期给大家介绍介绍。一、尤雨溪江湖流传一个小故事:一款名叫Clear的软件,在…

    2022年10月11日
    3
  • GD32 RT-Thread Nano+FinSH组件

    GD32 RT-Thread Nano+FinSH组件一、FinSH组件的命令执行流程图二、执行环境1.芯片:GD32F10x2.串口: #defineFINSH_UART USART1 #defineFINSH_UART_CLK RCU_USART1 #defineFINSH_TX_PIN GPIO_PIN_2 …

    2022年5月21日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号