文本数据处理之AWK 图解

2024-06-15 03:08
文章标签 awk 图解 数据处理 文本

本文主要是介绍文本数据处理之AWK 图解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、awk简介

awk是一种优良的文本处理工具。它不仅是 linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。awk提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。最简单地说, awk 是一种用于处理文本的编程语言工具。

awkgrepsed是处理文本数据必不可缺且必须熟练的处理工具。

grep: 文本过滤器

sed:流编辑器

awk: 报告生成器

二、awk的输出

awk其输出格式有两种:printprintf

print是简单的显示命令,printf 是格式化显示命令

1print的使用格式

printitem1, item2, ...

各项目之间使用逗号隔开,而输出时则以空白字符分隔;

输出的item可以为字符串或数值、当前记录的字段($1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;

print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print""

2printf的使用格式

printfformat, item1, item2, ...

其与print命令的最大不同是,printf需要指定format

format用于指定后面的每个item的输出格式;

每一个格式对应一个字段

printf不会自动打印换行符;\n

3format

format格式的指示符都以%开头,后跟一个字符;

%c: 显示字符的ASCII码;

%d, %i:十进制整数;

%e, %E:科学计数法显示数值;

%f: 显示浮点数;

%g, %G: 以科学计数法的格式或浮点数的格式显示数值;

%s: 显示字符串;

%u: 无符号整数;

%%: 显示%自身;

4、修饰符

N: 显示宽度;

-: 左对齐;

+:显示数值符号,默认为右对齐;

三、awk的变量

1awk内置变量之记录变量:

FS: field separator,读取文件本时,所使用字段分隔符;

RS: Record separator,输入文本信息所使用的换行符;

OFS: Output Filed Separator,文件分隔符;

ORSOutput Row Separator,行分隔符;

2awk内置变量之数据变量:

NR:The number of input recordsawk命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中行统一计数;

NFNumber of Field,当前记录的field个数;

FNR:NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;

ARGV:数组,保存命令行本身这个字符串,如awk'{print $0}' a.txt b.txt这个命令中,         ARGV[0]保存awkARGV[1]保存a.txt

ARGC:awk命令的参数的个数;

FILENAME:awk命令所处理的文件的名称;

ENVIRON:当前shell环境变量及其值的关联数组;

3、用户自定义变量

gawk允许用户自定义自己的变量以便在程序代码中使用,变量名命名规则与大多数编程语言相同,只能使用字母、数字和下划线,且不能以数字开头。gawk变量名称区分字符大小写。

脚本中赋值变量

gawk中给变量赋值使用赋值语句进行

命令行中使用赋值变量

gawk命令也可以在脚本外为变量赋值,并在脚本中进行引用

四、输出重定向

1 print items > output-file

print items >> output-file

print items | command

2、特殊文件描述符:

/dev/stdin:标准输入

/dev/sdtout: 标准输出

/dev/stderr: 错误输出

/dev/fd/N: 某特定文件描述符

 

五、awk的操作符

1、算术操作符:

 

-x: 负值

+x: 转换为数值;

x^y: 次方

x**y: 次方

x*y: 乘法

x/y:除法

x+y: 加法

x-y: 减法

x%y: 取余

2、字符串操作符:

只有一个,而且不用写出来,用于实现字符串连接;

3、赋值操作符:

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

注:如果某模式为=号,此时使用/=/可能会有语法错误,应以/[=]/替代;

4、布尔值

awk中,任何非0值或非空字符串都为真,反之就为假,与bash完全相反。

5、比较操作符

x < y 小于

x <= y 小于或等于

x > y 大于

x >= y 大于或等于

x == y 等于

x != y 不等于

x ~ y 被匹配的字符

x !~ y 不被匹配的字符

6、表达式间的逻辑关系符

&&

| |

7、条件表达式

selector?if-true-exp:if-false-exp

 

1

2

3

4

5

if selector; then

if-true-exp

else

if-false-exp

fi

 

8、函数调用

function_name (para1,para2)

多个参数用逗号隔开



六、awk的输出模式

1awk 'program' input-file1 input-file2 ...

其中的program为:

pattern { action }

pattern { action }

......

 

2常见的模式类型

Regexp: 正则表达式,格式为/regular expression/

expresssion: 关系表达式,其值非0或为非空字符时满足条件,可以是字符串或数字的比较

Ranges: 指定的匹配范围,格式为pat1,pat2

BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次

BEGIN模式是 在真正处理之前做些准备工作的功能,END模式是 在运行之后输出相关信息。

Empty(空模式):匹配任意输入行;

3常见的语句动作

 

Expressions : 表达式

Control statements: 控制语句

Compound statements : 组合语句

Input statements : 输入语句

Output statements : 输出语句

七、控制语句

1、if-else

语法:if (condition){then-body} else {[ else-body ]}

 

1

# awk -F: '{if ($1=="root") printf "%-15s: %s\n", $1,"Admin"; else printf "%-15s: %s\n", $1, "Common User"}' /etc/passwd

2、while

此while语句在awk中的作用体现是要么做成的循环体,要么在某个片上的循环

语法: while(condition){statement1; statment2; ...}

 

1

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

3、do-while

与while语句不同之处在:不管条件真假先执行一次循环体,再执行控制语句

语法: do {statement1, statement2,...} while (condition)

 

1

# awk -F: '{i=1;do {print $i;i++}while(i<=3)}' /etc/passwd

4、for

语法: for ( variableassignment; condition; iteration process) { statement1, statement2, ...}

 

1

# awk -F: '{for(i=1;i<=NF;i++) { if (length($i)>=4) {print $i}}}' /etc/passwd

for循环还可以用来遍历数组元素

语法: for (i in array) {statement1,statement2, ...}

 

1

# awk -F: '$NF!~/^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n",A,BASH[A]}}' /etc/passwd

 

5、case

语法:switch (expression) {case VALUE or /REGEXP/: statement1, statement2,... default: statement1, ...}

 

6、break 和 continue

常用于循环或case语句中

7、 next

提前结束对本行文本的处理,并接着处理下一行

 

1

# awk -F: '{if($3%2==0

八、awk中使用的数组

1、数组

array[index-expression]

index-expression可以使用任意字符串;需要注意的是,如果某数据组元素事先不存在,那么在引用其时,awk会自动创建此元素并初始化为空串;因此,要判断某数据组中是否存在某元素,需要使用index in array的方式。

1

# netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

2、要遍历数组中的每一个元素,需要使用如下的特殊结构

for (var in array) { statement1, ... }

其中var用于引用数组下标,而不是元素值

3、删除数组变量

从关系数组中删除数组索引需要使用delete命令。使用格式为

delete array[index]

九、awk的内置函数

1split(string, array [, fieldsep [, seps ] ])

功能:将string表示的字符串以fieldsep为分隔符进行分隔,并将分隔后的结果保存至array为名的数组中;数组下标为从0开始的序列;

2length([string])

功能:返回string字符串中字符的个数;

3substr(string, start [, length])

功能:取string字符串中的子串,从start开始,取length个;start从1开始计数

4system(command)

功能:执行系统command并将结果返回至awk命令

5、systime()

功能:取系统当前时间

6、tolower(s)

功能:将s中的所有字母转为小写

7、toupper(s)

功能:将s中的所有字母转为大写

) next;print $1,$3}' /etc/passwd

 

这篇关于文本数据处理之AWK 图解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062262

相关文章

LangChain转换链:让数据处理更精准

1. 转换链的概念 在开发AI Agent(智能体)时,我们经常需要对输入数据进行预处理,这样可以更好地利用LLM。LangChain提供了一个强大的工具——转换链(TransformChain),它可以帮我们轻松实现这一任务。 转换链(TransformChain)主要是将 给定的数据 按照某个函数进行转换,再将 转换后的结果 输出给LLM。 所以转换链的核心是:根据业务逻辑编写合适的转换函

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

Linux文本三剑客sed

sed和awk grep就是查找文本当中的内容,最强大的功能就是使用扩展正则表达式 sed sed是一种流编辑器,一次处理一行内容。 如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把结果删除 一行行处理,处理完当前行,才会处理下一行。直到文件的末尾。 sed的命令格式和操作选项: sed -e '操作符 ' -e '操作符' 文件1 文件2 -e表示可以跟多个操作

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

算法10—海量数据处理之top k算法

第一部分:Top K 算法详解 问题描述 百度面试题:     搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。     假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

海量数据处理经典思想

第一部分、十五道海量数据处理 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?     方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(

图解float属性的详细信息

转自:http://www.cnblogs.com/58top/archive/2013/01/09/details_about_float_property.html 正确使用CSS的float属性可能会变成一项艰巨的任务,,它涉及内容过多,浏览器兼容性问题也很多。它的定位不仅涉及 包含块,还涉及到了行框,块框,还有行内框等内容。本文包含的实施例的应用属性float说明性例子,以及一些失误

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化(一)通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解 码客 卢益贵 ygluu 关键词:游戏策划 可配置化 模块化配置 数据引擎 条件系统 红点系统 一、前言 在插件式模块化软件开发当中,既要模块高度独立(解耦)又要共享模块数据,最好的方法是有个中间平台(中间件)提供标准的接口来进行数据的交换,这在很多行业软件开发中已经广泛应用。但是,由于中间件的抽象和封

nlp基础-文本预处理及循环神经网络

1 认识文本预处理 1 文本预处理及其作用 定义:文本送给模型之前,提前要做的工作 作用:指导模型超参数的选择 、提升模型的评估指标 举个例子: 思路常识,打造成 X Y关于Y:10分类标签是否均衡关于X:数据有没有脏数据 数据长度(512)样本不够! 文本预处理 工作 结束 的标志:准备出来X和Y 能送给模型 2 文本预处理的主要环节 1 文本处理的基本方法 分词:按照一定规