一:linux中awk命令

1.awk命令简介
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符
linux中有三剑客之称:
三剑客之首就是 AWK
三剑客功能:
grep : 过滤文本
sed : 修改文本
awk : 处理文本

2.awk作用
awk主要是用来格式化
3.awk的语法格式
	awk [参数] [处理内容] [操作对象]
4.解析awk使用方法
print	: 打印
NF : 统计总字段数
$ : 取值
结合作用:
$配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
NF :相当于 变量值 $ :相当于 变量名
print相当于打印 $ 内的内容

5.参数
	-F : 指定文本分隔符 (本身默认是以空格作为分隔符)

实战案例:

awd -F'f' '{print $NF}' 1.txt
解析:

-F'f' : 指定f为分隔符

6.awk的生命周期
grep,sed和awk都是读一行处理一行,直到处理完成。
  1. 接收一行作为输入
  2. 把刚刚读入进来得到文本进行分解
  3. 使用处理规则处理文本
  4. 输入一行,赋值给$0,直至处理完成
  5. 把处理完成之后的所有数据交给END{}来再次处理

二:awk中的预定义变量

$0	: 代表当前行(相当于匹配所有)
awk -F: '{print $0, "---"}' /etc/passwd $n : 代表第n列

案例1:(以:为分隔符)

awk -F: '{print $1}' /etc/passwd

案例2:(默认空格为分隔符)

awk '{print $1}' /etc/passwd NF : 记录当前统计总字段数

案例1:(以:为分隔符 统计文件内每行内的行数)

awk -F: '{print NF}' /etc/passwd

案例2:(以:为分隔符 统计文件内每行总字段 并打印每行统计行数)

awk -F: '{print $NF}' /etc/passwd NR : 用来记录行号

案例1:

awk -F: '{print NR}' /etc/passwd FS : 指定文本内容分隔符(默认是空格)

案例1:

awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd

解析:

BEGIN{FS=":"} : 相当于指定以 : 为分隔符

$NF : 存储以 : 分隔符的最后一列

$1 : 存储以 : 分隔符的第一列

print : 打印
OFS : 指定打印分隔符(默认空格)

案例1:(输出的意思 分隔符会打印出来)

awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd

FS 的优先级要高于 -F

解析:

BEGIN{OFS=" >>> "} : 指定打印分隔符

$NF : 存储以 >>> 分隔符的最后一列

$1 : 存储以 >>> 分隔符的第一列

print : 打印

三:awk运行处理规则的执行流程

1. BEGIN{}	: 最开始执行
2. // : 正则
3. {} : 循环体
4. END{} : 最后执行
这里面最少有一个,最多有四个!

四:awk中的函数

	print	: 打印
printf : 格式化打印
%s : 字符串
%d : 数字
- : 左对齐
+ : 右对齐
15 : 至少占用15字符 awk中函数(格式化打印)

案例1:

awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF, $1}' /etc/passwd
解析:

| : 以 | 为分隔符

|%+15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 右对齐 占用15字符

|%-15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 左对齐 占用15字符

\n : 换行符

$NF : 存储以 | 为分隔符的最后一列

$1 : 存储以 | 为分隔符的第一列

五:awk中的定位

1.正则表达式
案例1:(awk中匹配有root内容的行)
awk -F: '/root/{print $0}' /etc/passwd
解析:
/root/{print $0} : awk中先执行正则 在执行循环 匹配文件内有root的每一行。
$0 :代表所有
案例2:(awk中匹配root开头的行)
awk -F '/^root/{print $0}' /etc/passwd

六:比较表达式(匹配文本之内的内容)

	>		: 小于
< : 大于
>= : 小于等于
<= : 大于等于
~ : 正则匹配(包含)
!~ : 正则匹配(不包含) 案例1:

要求打印属组ID大于属主ID的行

awk -F: '$4 > $3{print $0}' /etc/passwd

解析:

$4 : 代表属组所在列

$3 : 代表属主所在列

$0 : 所有行 案例2:

打印结尾包含bash

awk -F: '$NF ~ /bash/{print $0}' /etc/passwd

解析:

$NF ~ /bash/ :尾部最后一列 包含 bash 的行

~ : 包含
a案例3:

打印结尾不包含bash

awk -F '$NF !~ /bash/{print $0}' /etc/passwd

解析:

!~ : 不包含 (将打印其他内容)

七:条件表达式(文本之外的内容)

==
>
<
>=
<= 要求打印第三行

案例1:

awk -F: 'NR == 3{print $0} /etc/passwd'

解析:

NR : 行号

NR == 3 : 行号等于3 注意:

$1 : 是列

NR == 3 : 是行

八:逻辑表达式

	&&		: 逻辑与
|| : 逻辑或
! : 逻辑非 案例1:(与(两者条件必须都成立))

awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd 案例2:(或(两者条件一个成立即可))

awk -F: '$3 + $4 > 2000 || $3 * $4 > 2000{print $0}' /etc/passwd
案例3:(非(条件取反))

awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd

九:算数表达式

	+	:加
- :减
* :乘
/ :除
% :求余 1.要求匹配打印出属组 + 属主的ID 大于 2000 的

案例1:

awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd 2.要求属组 * 属主的ID 大于 2000

案例2:

awk -F: '$3 * $4 > 2000{print $0}' /etc/passwd 3.要求打印偶数行

案例3:

awk -F: 'NR % 2 == 0{print $0}' /etc/passwd

解析:

NR :全部行号 除以 2 == 零的 零等于余数 偶数 : 2 4 6... 4.要求打印奇数行

案例4:

awk -F: 'NR % 2 == 1{print $0}' /etc/passwd
NR  :全部行号 除以 2 == 1的 零等于奇数

奇数: 1 3 5...

十:流程控制

简介:
流程控制只存在循环之中 if:

awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd

解析:

判断文件 第三列大于第四列的话打印(大于) 不大于 else if 使用格式:

if(){} : 但分支

if(){}else{} : 双分支

if(){}else if(){}else{} : 多分支 for每一行打印10次

for 使用格式

awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd

解析:

i-- 相当于python中的 i-=1 : i=i-1

减到条件不成立为止

格式:

fro(i="初始值":条件判断:游标){}
while每一行打印10次

while 使用格式

awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd

解析:

i++ 相当于python中的 i+=1

加到条件不成立为止

格式:

while(条件判断){}

十一:实战案例(if判断打印隔五一行线)

1.使用if判断
每隔5行,打印一行横线
awk -F: '{if(NR%5==0){print "----------"}print $0}' /etc/passwd
解析:
1. NR : 每一行的行号
2. 行号 除以 5 ==0
3. 打印一行
以此类推 4%5=0.8

点击查看原文章

linux中awk命令详解(最全面秒懂)的更多相关文章

  1. 【转】linux中ifconfig 命令详解详解

    1 概述 ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息永远的存的电 ...

  2. Linux中rm命令详解

    linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除 ...

  3. Linux之awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  4. linux中top命令详解

    linux的top命令里的cpu信息是什么意思呢? Cpu(s): 62.1% us, 15.9% sy,0.1% ni, 19.4% id,2.0% wa,0.1% hi,0.4% si Mem:  ...

  5. linux下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  6. linux中echo命令详解

    linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 echo命令的功能是在显示器上显示一段文字,一般起到一个提示 ...

  7. Linux的awk命令详解

    awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,默认以空格为分隔符将每行切片,切开的部分再 ...

  8. linux 之awk命令详解

    awk是一种程序语言,对文档资料的处理具有很强的功能.awk名称是由它三个最初设计者的姓氏的第一个字母而命名的: Alfred V. Aho.Peter J. We i n b e rg e r.Br ...

  9. linux中ls命令详解 (转)

    -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目 ...

随机推荐

  1. Torch的索引与形变

    >>> a = torch.Tensor([[1,2],[3,4]])>>> atensor([[1., 2.], [3., 4.]])>>> a ...

  2. DAST 黑盒漏洞扫描器 第四篇:扫描性能

    0X01 前言 大多数安全产品的大致框架 提高性能的目的是消费跟得上生产,不至于堆积,留有余力应对突增的流量,可以从以下几个方面考虑 流量:减少无效流量 规则:减少规则冗余请求 生产者:减少无效扫描任 ...

  3. 关于kali安装输入法

    之前老是被kali大小写输入恶心坏了,正好看到一篇文章写kali安装搜狗输入法的,虽然不需要输入中文,但是英文输入就很方便了. 一.切换root用户登录 1.sodu su切换为root权限 2.pa ...

  4. Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例

    ​  目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...

  5. HMS Core音频编辑服务3D音频技术,助力打造沉浸式听觉盛宴

    2022年6月28日,HDD·HMS Core.Sparkle影音娱乐沙龙在线上与开发者们见面.HMS Core音频编辑服务(Audio Editor Kit)专家为大家详细分享了基于分离的3D音乐创 ...

  6. 使用net core 6 c# 的 NPOI 包,读取excel..xlsx单元格内的图片,并存储到指定服务器

    这个是记录,单元格的图片. 直接上代码,直接新建一个 net core api 解决方案,引用一下nuget包.本地创建一个 .xlsx 格式的excel文件 using ICSharpCode.Sh ...

  7. RESTAPI 版本控制策略【eolink 翻译】

    微服务,是现阶段开发建设云原生应用程序的流行趋向.API 版本控制有益于在辨别出所需要的调节时加速迭代更新的速度. 根据微服务架构的关键构件其一,是 API 的设计和规范.针对 API,版本控制是不可 ...

  8. Nginx配置解决NetCore的跨域

    使用Nginx配置解决NetCore的跨域 废话不多说,直接上Nginx配置 server { listen 80; server_name 你的Id或域名; location / { add_hea ...

  9. Solution -「最大权闭合子图」做题随笔

    T1 小 M 的作物 先从简化题目入手,考虑先去掉 \(c\) 的额外收益.然后尝试将所有作物种在 \(B\), 则目前得到了 \(\sum \limits_{i = 1} ^n b_i\) 的收益. ...

  10. 161_可视化_Power BI 复刻 GitHub 贡献热力图

    161_可视化_Power BI 复刻 GitHub 贡献热力图 一.背景 在 GitHub 上,有用户的贡献度的热力图如下: Power BI 公共 web 效果:https://demo.jiao ...