首页 > 其他分享 >56、文本处理工具-awk

56、文本处理工具-awk

时间:2023-01-12 10:38:09浏览次数:49  
标签:... statements 56 文本处理 awk 分隔符 字符串 array

awk工作原理

awk/gawk实现下面功能:文本处理、输出格式化的文本报表、执行算术运算、执行字符串操作

56、文本处理工具-awk_函数

格式:

awk [option] 'program' var=value file...
awk [option] -f programfile var=value file...

说明:program通常放到单引号中,又以下三部分组成:BEGIN语句块 模式匹配通用语句块 END语句块

常用选项:
-F "分隔符" 指明输入时用到的分隔符,默认分隔符是若干个连续空白符
-v var=value 变量赋值

program格式
patterm{action statements;...} pattern:触发语句,如BEGIN(开始处理文本前执行一次)、END(文本处理后执行一次)、正则等
action statements:对数据进行处理,放在{}内指明,常见print,printf

分隔符、域和记录

分隔符:由分隔符分隔的字段(列column 域filed)标记$1(第一列) $2 $n称为域标识,56、文本处理工具-awk_awk_02符号不同

文件中的每一行称为记录record  默认变量NR

如果省略action,则默认执行print $0的操作

常用action分类

output statements:print printf

expressions:算术,比较表达式等

compound statements:组合语句

control statements:if while语句等

input statements

awk控制语句

{statements;...}组合语句

if(condition){statements;...}

if(condition){statements;...}else{statements;...}

while(condition){statements;...}

do{statements;...}while{condition}

for(expr1;expr2;expr3){statements;...}

break

continue

exit

动作print

格式 print item1, item2, ...

说明:逗号分隔符,输出item可以字符串,也可以是数值;当前记录的字段、变量或awk表达式、固定字符串需要用""引起来,而变量和数值不需要

56、文本处理工具-awk_条件判断_03

56、文本处理工具-awk_条件判断_04

取ip地址例子

56、文本处理工具-awk_函数_05

取磁盘挂载点及磁盘分区格式/etc/fstab

56、文本处理工具-awk_函数_06

56、文本处理工具-awk_函数_07

取分区利用率

56、文本处理工具-awk_awk_08

文件host_list.log 如下格式,请提取”.xxx.com”前面的主机名部分并写入到回到该文件中

56、文本处理工具-awk_条件判断_09

awk变量

内置变量:

FS:输入字符字段分隔符,默认空白字符,功能相当于-F

56、文本处理工具-awk_条件判断_10

OFS:输出字段分隔符,默认空白字符

56、文本处理工具-awk_函数_11

RS:输入记录record分隔符,指定输入时的换行符,默认\n换行符

56、文本处理工具-awk_条件判断_12

ORS:输出记录分隔符,输出时用指定符号代替换行符

56、文本处理工具-awk_循环_13

NF:字段数量

56、文本处理工具-awk_条件判断_14

56、文本处理工具-awk_awk_15

查看rpm包架构数量

56、文本处理工具-awk_条件判断_16

NR:记录的编号

56、文本处理工具-awk_awk_17

56、文本处理工具-awk_函数_18

取IP地址

56、文本处理工具-awk_函数_19

FNR:各文件分别计数,记录的编号

56、文本处理工具-awk_函数_20

FILENAME:当前文件名

56、文本处理工具-awk_循环_21

ARGC:命令行参数的个数

56、文本处理工具-awk_函数_22

ARGV:数组,保存的是命令行所给定的各参数,每一个参数:ARGV[0],......

56、文本处理工具-awk_awk_23

自定义变量(区分字符大小写)

-v var=value 在program中定义

56、文本处理工具-awk_awk_24

56、文本处理工具-awk_awk_25

56、文本处理工具-awk_函数_26

printf

格式化输出,格式 printf “format”, item1,item2,...

说明:必须制定format,不会自动换行,需要显示给出换行符\n  format中需要分别为后面每个item指定格式符

格式符:
%c 显示ascii码
%d,%i 十进制整数
%e %E 显示科学计数法数值
%f 显示浮点数
%g %G以科学计数法显示浮点数值
%u 无符号整数
%s 显示字符串
%% 显示%号

修饰符
#[.#] 第一个数值控制先死的宽度,第二个表示小数点后的精度如 %3.1f
- 左对齐 如%-15s
+右对齐 如%+d

56、文本处理工具-awk_awk_27

56、文本处理工具-awk_函数_28

操作符

算术操作符

x+y  x-y x*y x/y x%y   +x将字符串转换为数值  -x转换为负数

字符串操作符:没有符号的操作符,字符串连接

赋值操作符

=  +=  -=  *= /= %= ^=  ++  --

56、文本处理工具-awk_函数_29

56、文本处理工具-awk_函数_30

56、文本处理工具-awk_循环_31

56、文本处理工具-awk_函数_32

比较操作符

==  >=    <=     >   <         !=

56、文本处理工具-awk_awk_33

56、文本处理工具-awk_条件判断_34

模式匹配符 

~ 左边与右边是否匹配,包含关系  !~是否不匹配

56、文本处理工具-awk_awk_35

56、文本处理工具-awk_函数_36

逻辑操作符

与 $$    或 ||    非 !,取反

56、文本处理工具-awk_awk_37

条件表达式(三目运算符)

条件?真执行语句:假执行语句

56、文本处理工具-awk_awk_38

56、文本处理工具-awk_函数_39

模式pattern

pattern:根据pattern条件,过滤匹配的行,再做处理,如果未指定,则处理每一行,需要用//括起来

56、文本处理工具-awk_函数_40

关系表达式,结果为真才执行

56、文本处理工具-awk_函数_41

56、文本处理工具-awk_循环_42

行范围line ranges

不支持行号,但是可以使用NR间接指定行号;/pat1/,/pat2/ 不支持直接给出数字格式

56、文本处理工具-awk_循环_43

56、文本处理工具-awk_条件判断_44

BEGIN END模式

BEGIN{}:开始处理文本前执行一次

END{}:仅在执行文本处理后执行一次

56、文本处理工具-awk_awk_45

条件判读语句if-else

语法

if(condition){statement;...}[else statement]
if(condition){statement;...}else if(condition2){statement}else if(condition3){statement3}....else{statementN}

56、文本处理工具-awk_函数_46

56、文本处理工具-awk_循环_47

switch语句

语法

switch(expression){case value1 or /reg/:statement1;case value2 or /reg2/:statement2;...;default:statment}
循环while

语法

while (condition) {statement;…}
条件“真”,进入循环;条件“假”,退出循环
使用场景:
对一行内的多个字段逐一类似处理时使用
对数组中的各元素逐一处理时使用

56、文本处理工具-awk_函数_48

56、文本处理工具-awk_函数_49

循环do-while

语法

do {statement;…}while(condition) 无论真假,先执行一次

56、文本处理工具-awk_awk_50

循环for

语法

for(expr1;expr2;expr3){statement;...}如for(variable assignment;condition;iteration process) {for-body}
特殊用法 for(var in array){for-body}

56、文本处理工具-awk_awk_51

56、文本处理工具-awk_awk_52

continue和break

continue中断本次循环   break 中断整个循环

格式  continue [N] break [N]

next

next可以提前结束对本行处理而直接进入下一行处理,针对的是awk的处理行循环;功能类似continue,但不能用continue

56、文本处理工具-awk_函数_53

数组

awk的数组为关联数组

格式

array_name[index]
weekdays["mon"]="Monday"
注意:可使用任意字符串,但是字符串必须使用双引号括起来;如果某数组元素不存在,则引用时,会自动创建该元素并赋值空串;使用for(index in array)遍历数组

56、文本处理工具-awk_条件判断_54

56、文本处理工具-awk_awk_55

56、文本处理工具-awk_awk_56

多维数组

[root@centos8 ~]#awk 'BEGIN{
> array[1][1]=11
> array[1][2]=12
> array[1][3]=13
> array[2][1]=21
> array[2][2]=22
> array[2][3]=23
> for (i in array)
> for (j in array[i])
> print array[i][j]
> }'
11
12
13
21
22
23
awk函数

常见内置函数

数值处理:rand()返回0和1之间随机数  srand():配合rand()生成随机数的种子  int():返回整数

56、文本处理工具-awk_循环_57

56、文本处理工具-awk_awk_58

字符串处理:

length([S]):返回指定字符串的长度

sub(r,s,[t]):对t字符串搜索r表示模式匹配的内容,并将第一个匹配内容替换为s

56、文本处理工具-awk_awk_59

split(s,array,[r]):以r为分隔符,需要双引号引用,切割字符串s,并将切割后的结果保存在所表示的array数组中,第一个索引值为1.....

56、文本处理工具-awk_循环_60

56、文本处理工具-awk_awk_61

system函数:可以awk中调用shell命令,空格是awk中的字符串连接付,如果systemn中需要使用awk中的变量可以使用空格分隔,或者说出来awk的变量外一律用“”引用起来

56、文本处理工具-awk_条件判断_62

自定义函数

自定义函数格式

function name(parameter,parameter,...){
statements
return expression
}

56、文本处理工具-awk_函数_63

awk脚本

将awk写成脚本,直接调用执行

56、文本处理工具-awk_循环_64

56、文本处理工具-awk_循环_65

56、文本处理工具-awk_循环_66

向awk传递脚本参数

格式
awkfile var=value var2=value2... Inputfile

56、文本处理工具-awk_循环_67

56、文本处理工具-awk_条件判断_68

注意:在BEGIN过程中不可用。直到首行输入完成以后,变量才可用。可以通过-v 参数,让awk在执行BEGIN之前得到变量的值。命令行中每一个指定的变量都需要一个-v参数

标签:...,statements,56,文本处理,awk,分隔符,字符串,array
From: https://blog.51cto.com/gavenlee/6003639

相关文章

  • laravel使用JWT签名算法,HS256和RS256有什么区别
    JWT签名算法中HS256和RS256有什么区别JWT签名算法中,一般有两个选择,一个采用HS256,另外一个就是采用RS256。签名实际上是一个加密的过程,生成一段标识(也是JWT的一部分)作为接......
  • awk(一) 基本操作符
    $0       表示整个当前行$1       每行第一个字段NF            字段数量变量NR      每行的记录号,多文件记录递增......
  • 561. 数组拆分
    问题描述https://leetcode.cn/problems/array-partition/description/解题思路这个题目很有意思。其中的思想依然是贪心。我们要去想,在一个小的数对中,我们应该怎么样才......
  • 3568开发板ubuntu环境下安装Visual Studio Code
    首先进入官网下载,进入如下页面,选择适合自身版本的 ​​Linux​​ 的.deb版本下载,也可以直接使用我们提供好的安装包。下载完成之后,拷贝到ubuntu上,如下图所示:然后使用以......
  • 【awk】找出两个文件中的不同值
    https://blog.csdn.net/weixin_33534991/article/details/116683524 awk'NR==FNR{a[$0]}NR>FNR{if(!($1ina))print$0}'file1file2找出文件2中跟文件1不同的......
  • awk
    获取第一行内容内容如下$lscpuArchitecture:x86_64CPUop-mode(s):32-bit,64-bitAddresssizes:39bitsphysical,48bitsvirt......
  • 【题解】P5666 [CSP-S2019] 树的重心
    感觉对重心的理解更直观了一点。题意求一棵树上删去每一条边后两侧子树重心的编号和。\(n\leq3\times10^5\)思路神奇的清真数论。首先这里有一步很妙的操作:把整......
  • Codeforces - 1656E - Equal Tree Sums(构造 + 树论 + 图论 + 搜索、结论题、*2200)
    1656E-EqualTreeSums(⇔源地址)目录1656E-EqualTreeSums(⇔源地址)tag题意思路AC代码错误次数:0tag⇔*2200、⇔构造、⇔树论、⇔图论、⇔搜......
  • Linux文本处理三剑客
    grepgrep:GlobalsearchREgularexpressionandPrintouttheline作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行模式:由正则表......
  • SQL server数据库 账户SA登录失败,提示错误:18456
    在我们使用数据库的时候,偶尔会遇到一些登录上的错误提示。比如,在数据库配置上没有正确开启用户的登录策略以及服务器身份验证模式时,就会提示“用户’sa’登录失败。(Micros......