我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux中如何使用awk命令

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux中如何使用awk命令

这篇文章将为大家详细讲解有关linux中如何使用awk命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk

有三种方式调用awk

说明:

awk被设计用于数据流,能够对列和行进行操作。而sed更多的是匹配,进行替换和删除。
awk有很多内建的功能,比如数组,函数等。灵活性是awk的最大优势。

awk的结构
awk '
BEGIN{ print "start"}
pattern { commands }
END{ print "end"}'
file
为了偏于观看,我打了回车,实际上是一行

一个awk脚本通常是3部分
1. BEGIN语句块
2. 能够使用模式匹配的通用语句块
3. END语句块
 他们任何一部分都可以不出现在脚本中。脚本通常包含在双引号或者单引号内。
 例如:

awk 'BEGIN{i=0}{i++}END{print i}' filename 

工作原理

awk命令的工作方式如下:

执行BEGIN{commands}语句块中的语句
2. 从文件或者stdin中读取一行,然后执行pattern{commands}. 迭代直到全部读取完毕
3. 最后执行END{commands}语句块

再次提醒,他们任何一部都可以没有

而awk的功能也远不止如此

入门实例:

代码如下:

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1,var2,var3;}' 
打印: v1 v2 v3 

解释:逗号为定界符(分隔符)

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}'

打印v1-v2-v3

解释:双引号为连接符

其他任何符号,都不能正常输出v1,v2,v3

解读--help(一个非常庞大复杂的帮助文档,官方用了410页的篇幅PDF来介绍,如果我只言片语,你信我自己都不信。。)

用法: awk [POSIX 或 GNU 风格选项] -f 脚本文件 [--] 文件 ...
用法: awk [POSIX 或 GNU 风格选项] [--] '程序' 文件 ...
POSIX 选项:             GNU 长选项:
     -f 脚本文件        --file=脚本文件
    -F fs            --field-separator=fs
指定输入文本分隔符,fs是一个字符串或者是一个正则表达式,
    -v var=val        --assign=var=val
将外部变量值付给var
     -m[fr] val
     -O            --optimize
启用一些优化程序的内部表示。
     -W compat        --compat
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
     -W copyleft        --copyleft
打印简短的版权信息
    -W copyright        --copyright
打印短版的通用公共许可证,然后退出
     -W dump-variables[=file]    --dump-variables[=file]
打印全局变量,其类型,提交的最终值的排序列表。
    -W exec=file        --exec=file
与-f类似,但与他有两点不同,(我回头把相关文档上传,太长)
    -W gen-po        --gen-po
(内容太多)
    -W help            --help 打印帮助
    -W lint[=fatal]        --lint[=fatal]
警告可疑或不移植到其他的awk实现的结构
     -W lint-old        --lint-old
打印关于不能向传统unix平台移植的结构的警告
     -W non-decimal-data    --non-decimal-data
启用自动输入数据的解释,八进制和十六进制值
     -W profile[=file]    --profile[=file]
启用awk程序剖析
     -W posix        --posix
在严格意义上的POSIX模式运作。
     -W re-interval        --re-interval
允许间隔表达式在正则表达式上
    -W source=program-text    --source=program-text
     -W traditional        --traditional
传统的Unix awk的正则表达式匹配
     -W usage        --usage
     -W use-lc-numeric    --use-lc-numeric
解析数字输入时,强制使用的语言环境中的小数点字符
 数据
 -W version        --version
提交错误报告请参考“gawk.info”中的“Bugs”页,它位于打印版本中的“Reporting
 Problems and Bugs”一节

注意:gawk是awk的GNU版本,即使help ,在ubuntu下也需要先安装gawk

这回我们就不解读了,为了增加大家的信息和乐趣,先来点基本的:

部分特殊变量:

NR: 表示记录数量,在执行过程中对应于行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0: 这个变量包含执行过程中当前行的文本内容
$1: 第一个字段的文本内容
$2: 第二个字段的文本内容

例子:

例1.

代码如下:


echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7"|\#这个\是在窗口中写多行命令用的 
awk '{ 
print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 
}' 

小注一下:$1是打印第一个,$NF打印最后一个字段,$(NF-1)打印倒数第二个

 例2.

seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}'

这个例子用到了基本格式。

BEGIN中 初始化了sum,打印Summation
中间模块打印了第一列,然后给sum+1

END中打印了sum

 例3. 关于-v 外部变量

代码如下:


$ VAR=10000
$echo | awk –v VARIABLE=$VAR'{print VARABLE}'

还有另一种灵活的方法可以将多个外部变量传递给awk,例如:

代码如下:


$var1="value1" var2="value2"
$echo | awk '{print v1,v2}' v1=$var1 v2=$var2

如果来自文件

awk '{print v1,v2}' v1=$var1 v2=$var2 filename

例4

$awk 'NR < 5' #行号小于5
$awk 'NR==1,NR==4' #行号在1到5之间的行
$awk '/linux/' #包含样式linux的行(可以用正则表达式指定样式)
$awk '!/linux/' #不包含样式linux的行

这次先写这些,争取在花2个篇幅能把awk做个比较全面的认识。

awk补充

之前我们学习了awk基本入门,我惊喜的发现有awk一篇详细文章,有写念头,不能全部转载,转化成自己的方式来写一些。

主讲内置变量和部分字符串函数

内置变量(有翻译特殊变量和环境变量,按照官方翻译为内置变量)

变量

说明

$n当前记录的第n个字段,字段间由FS分隔。
$0完整的输入记录。
ARGC命令行参数的数目。
ARGIND命令行中当前文件的位置(从0开始算)。
ARGV包含命令行参数的数组。
BINMODE在非POSIX系统上,这个变量指定的所有I / O使用二进制模式
CONVFMT数字转换格式(默认值为%.6g)
ENVIRON环境变量关联数组。
ERRNO最后一个系统错误的描述。
FIELDWIDTHS字段宽度列表(用空格键分隔)。
FILENAME当前文件名。
FNR同NR,但相对于当前文件
FPAT

这是一个正则表达式(字符串),告诉gawk基于匹配正则表达式的文本来创建字段

FS字段分隔符(默认是任何空格)。
IGNORECASE如果为真,则进行忽略大小写的匹配。
LINT

当这个变量为真(非零或非空),gawk的行为犹如"--lint"命令行选项

NF当前记录中的字段数。
NR当前记录数。
OFMT数字的输出格式(默认值是%.6g)。
OFS输出字段分隔符(默认值是一个空格)。
ORS输出记录分隔符(默认值是一个换行符)。
PROCINFO

这个数组的元素提供访问运行awk程序的信息

RLENGTH由match函数所匹配的字符串的长度。
RS记录分隔符(默认是一个换行符)。
RT每次一条记录被读取的设置
RSTART由match函数所匹配的字符串的第一个位置。

SUBSEP

数组下标分隔符(默认值是\034)。

TEXTDOMAIN此变量用于程序的国际化

蓝色为新增加的内置变量。

简单举例:


01.sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }'


打印密码第一行,用冒号分隔符


代码如下:


awk 'END{print FILENAME}' awk.txt

打印文本FILENAME

seq 100 | awk 'NR==4,NR==6'

打印4到6行

 再介绍几个awk内置的字符串函数,也讲一部分。

length(string):
 返回字符串的长度

index(string,serch_string):
返回search_string在字符串中出现的位置

split(string,array,delimiter):
用定界符生成一个字符串列表,并将该列表存入数组

substr(string,array,delimiter):
 在字符串中用字符起止便宜量生成子串,并返回该子串

sub(regex,replacement_str,string):
将正则表达式匹配到的第一处内容替换成replacement_str

gsub(regex,replacement_str,string):
和sub()类似。不过该函数会替换正则表达式匹配到的所有内容

match(regex,string):
检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0.match()有两个相关的特殊变量,分别是RSTART喝RLENGTH。变量RSTART包含正则表达式所匹配内容的其实位置,而变量RLENGTH包含正则表达式所匹配内容的长度。
 

举例:

$ awk '{ sub(/test/, "mytest"); print }' testfile

在整个记录中匹配,替换只发生在第一次匹配发生的时候

$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile

在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候

$ awk '{ print index("test", "mytest") }' testfile

实例返回test在mytest的位置,结果应该是3

$ awk '{ print length( "test" ) }'

实例返回test字符串的长度。

awk补充二

这节可能要写的比较粗了,时间太少。

一. 内置函数
注意一种约定俗称语法习惯: [a]代表a可选.

数字函数(Numeric Functions)

函数名

说明

atan2(y,x)返回y/x弧的反正切
cos(x)返回x的余弦
exp(x)返回x的指数
int(x)返回最靠近的整数,风向标指向0
log(x)返回x的自然对数
rand()返回随机数
sin(x)返回x的正弦
sqrt(x)返回x的正平方根
srand([x])生成随机数,可以设置起点

字符串操作函数(String-Manipulation Functions)
注意:蓝色部分为gawk特有,awk没有此函数功能。

函数名

说明

asort(source [, dest [, how ] ])返回数组元素数(内容较多)
asorti(source [, dest [, how ] ]) 同asort,(有细微差别)
gensub(regexp, replacement, how [, target])搜索正则表达式RegExp匹配的regexp
gsub(regexp, replacement [, target])将正则表达式匹配的第一处内容替换成replacement_str
index(in, find)返回find在字符串in中出现的位置
length([string])string 中的字符数
match(string, regexp [, array])检查正则表达式能否匹配字符串
patsplit(string, array [, fieldpat [, seps ] ])

划分件到由fieldpat定义的字符串,并存储在array里,分隔字符串存在在seps数组

split(string, array [, fieldsep [, seps ] ])用定界符生成一个字符串列表,并将该列表存入数组
sprintf(format, expression1, ...)打印
strtonum(str)字符转转换成数字
sub(regexp, replacement [, target])将正则表达式匹配到的第一处内容替换成replacement
substr(string, start [, length])分割字符串,根据其实位置和长度
tolower(string)转换成小写
toupper(string)转换成大写

输入输出函数(Input/Output Functions)

函数

说明

close(filename [, how])关闭文件输入输出流
fflush([filename])刷新与文件名相关的任何缓冲输出
system(command)执行操作系统命令,返回值给awk程序

 时间函数(Time Functions)

函数

说明

mktime(datespec)datespec为时间戳格式,与systime()格式一样
strftime([format [, timestamp [, utc-flag]]])格式化timestamp的内容,返回日期格式
systime()返回系统时间,精确到秒

 位操作函数(Bit-Manipulation Functions)

函数

说明

and(v1, v2)v1,v2的与操作结果
compl(val)val的反码
lshift(val, count)返回val左移count位的值
or(v1, v2)v1,v2的或操作
rshift(val, count)返回val右移count位的值
xor(v1, v2)返回v1,v2的异或的值

获取类型信息(Getting Type Information)

函数

说明

isarray(x)如果x是数组,返回true.否则false

字符串转换函数(String-Translation Functions)

函数

说明

bindtextdomain(directory [, domain])设置awk要搜寻信息的目录和域
dcgettext(string [, domain [, category]])返回的字符串string 翻译文本域domain 的语言环境类别category
dcngettext(string1, string2, number [, domain [, category]])

返回string1和string2的翻译数量的复数形式,string1,string2在语言环境类别的文本域里

内置函数还有些高级特性,等许多实例,以后有机会补充。

 二. 自定义函数

格式入下:

function name([parameter-list])   

{  
  body-of-function  
}  

如:

function myprint(num)  
{  
  printf "%6.3g\n", num  
}

 awk这个命令还有很多功能,打算就只写这么多了。以后可能更多在一些例子里,与其他命令结合时会提到。

关于“linux中如何使用awk命令”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux中如何使用awk命令

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux中如何使用awk命令

这篇文章将为大家详细讲解有关linux中如何使用awk命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报
2023-06-09

linux awk命令如何使用

今天小编给大家分享一下linux awk命令如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-02-02

如何使用Linux中的awk命令

这篇文章主要介绍了如何使用Linux中的awk命令,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据
2023-06-28

awk命令如何使用

今天小编给大家分享一下awk命令如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Awk模式Awk支持不同类型的模式,包
2023-06-27

linux中awk命令的使用方法

今天就跟大家聊聊有关linux中awk命令的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。awk脚本如下BEGIN {FS=":";OFS=":"} {total_secon
2023-06-09

怎么在Linux中使用awk命令

怎么在Linux中使用awk命令?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。awk简介 awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberg
2023-06-13

如何使用awk的next命令

这篇文章将为大家详细讲解有关如何使用awk的next命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。要明白它是如何工作的, 让我们来分析一下 food_list.txt 它看起来像这样:Food Lis
2023-06-12

Linux中“awk”命令的用法

Linux中“awk”命令的用法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符
2023-06-05

linux中awk命令怎么用

这篇文章给大家分享的是有关linux中awk命令怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。awk是一种模式扫描和处理语言,在对数据进行分析处理时,是十分强大的工具。awk [options] patte
2023-06-09

Linux的awk命令怎么使用

今天小编给大家分享一下Linux的awk命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。awk是一款文本分析工具a
2023-06-28

如何在Linux中使用awk命令处理文字数据

本篇文章为大家展示了如何在Linux中使用awk命令处理文字数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、awk可以显示文件中的内容,如下图所示,awk显示passwd中的内容,并且设置只显
2023-06-10

linux中如何使用awk命令删除文本重复行

linux中如何使用awk命令删除文本重复行,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。测试文本如下:# cat 1.txt2.1.10.12.1.10.22.11.0.12
2023-06-12

linux中的Awk命令怎么用

这篇文章主要介绍linux中的Awk命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Awk 是一个强大的工具,可以执行某些可能由其它常见实用程序(包括 sort)来完成的任务。Awk 是个普遍存在的 Unix
2023-06-16

Linux系统如何使用awk命令批量杀进程

这篇文章给大家分享的是有关Linux系统如何使用awk命令批量杀进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在管理系统时,难免会碰到需要杀掉某一类的进程,但是进程数量非常多,使用命令一个一个处理效率太慢。p
2023-06-28

linux中如何使用awk

这篇文章给大家分享的是有关linux中如何使用awk的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。awk 是用于 Unix 和类 Unix 系统的强大文本解析工具,但是由于它有可编程函数,因此你可以用它来执行常规
2023-06-16

Linux系统中awk命令怎么用

这篇文章给大家分享的是有关Linux系统中awk命令怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Awk是Linux命令三剑客之一,在linux中主要对文件格式化输出,在日志和文本中对数据进行格式化处理。a
2023-06-28

详解Linux中的awk命令

简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有3个不同版本:
2022-06-04

awk中next命令怎么使用

这篇文章主要介绍了awk中next命令怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇awk中next命令怎么使用文章都会有所收获,下面我们一起来看看吧。awk的next相当于循环中continue的作用
2023-06-27

linux 中怎么使用awk命令连接字符串

本篇文章为大家展示了linux 中怎么使用awk命令连接字符串,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、awk字符串转数字 [chengmo@centos5 ~]$ awk BEGIN{a=
2023-06-13

Linux中awk命令的作用是什么

Linux中awk命令的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一
2023-06-09

编程热搜

目录