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 命令「建议收藏」


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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UVA 11090 – Going in Cycle!!(Bellman-Ford)[通俗易懂]

    UVA 11090 – Going in Cycle!!(Bellman-Ford)

  • 如何设计单元测试用例「建议收藏」

    如何设计单元测试用例「建议收藏」如何编写单元测试用例(白盒测试)。一、单元测试的概念单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。测试的覆盖种类1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。2.判定覆盖(也叫分支覆盖…

  • 【转载】聊一聊C#的Equals()和GetHashCode()方法

    【转载】聊一聊C#的Equals()和GetHashCode()方法

    2021年11月21日
  • 完美可用-DirectX修复工具增强版DirectX Repair

    完美可用-DirectX修复工具增强版DirectX RepairDirectX修复工具最新版:DirectXRepairV3.7增强版  NEW!版本号:V3.7.0.26539大小:107MB/7z格式压缩,189MB/zip格式压缩,322MB/解压后其他版本:标准版   在线修复版MD5校验码:DirectXRepair.exe/0615325098da4e624ef854af60b56ba2       DirectX_…

  • 老鼠吃奶酪(老鼠图片大全)

    老鼠吃奶酪(老鼠图片大全)本总结是是个人为防止遗忘而作,不得转载和商用。题目        一只老鼠位于迷宫左上角(0,0),迷宫中的数字9处有块大奶酪。0表示墙,1表示可通过路径。试给出一条可行的吃到奶酪的路径;若没有返回空。        假定迷宫是4连通的,即:老鼠只能上下左右走,不能斜着走。                  算法描述        这实际上就是练习深度优先搜索。

  • 硬件知识指什么

    硬件知识指什么
    计算机硬件基础知识
    电脑硬件概述
    广义的硬件不是特指计算机硬件,而是指泛指一些设施、设备、材料等有形物质及无形的精神物质。
    硬件:构成电脑的物质实体,称为硬件。如主机、显示器、键盘、鼠标。
    “计算机硬件”的简称(中国大陆及香港用语,台湾叫硬体)。与“软件”相对。电子计算机系统中所有实体部件和设备的统称。从基本结构上来讲,电脑可以分为五大部分:运算器、存储器、控制器、输入设备、输出设备等。一般我们看到的电脑都是由:主机(主要部分)、输出设备(显示器)、输

发表回复

您的电子邮箱地址不会被公开。

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