linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网
Linux文件处理awk命令详解教程
Linux awk命令说明
awk 是一个强大的文本分析工具,相对于
awk 有 3 个不同版本: awk、nawk 和 gawk,未作特别说明,一般指 gawk,gawk 是 AWK 的 GNU 版本。
awk 其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为 “样式扫描和处理语言”。
它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
Linux awk命令详解
功能
对文本进行分析与处理。
语法
awk '{pattern + action}' input-file(s)
参数
参数
描述
field-separator
awk 命令分隔符。
commands
命令。
input-file
要处理的文件。
说明
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern 就是要表示的正则表达式,用斜杠括起来。
awk 语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk 抽取信息后,才能进行其他文本操作。完整的 awk 脚本通常用来格式化文本文件中的信息。
通常,awk 是以文件的一行为处理单位的。awk 每接收文件的一行,然后执行相应的命令,来处理文本。
Linux awk命令功能详解
命令
描述
$0
表示整个当前行。
$1
每行第一个字段。
NF
字段数量变量。
NR
每行的记录号,多文件记录递增。
FNR
与 NR 类似,不过多文件记录不递增,每个文件都从 1 开始。
\t
制表符。
\n
换行符。
FS
BEGIN 时定义分隔符。
RS
输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)。
~
匹配,与 == 相比不是精确比较。
!~
不匹配,不精确比较。
==
等于,必须全部相等,精确比较。
!=
不等于,精确比较。
&&
逻辑与。
||
逻辑或。
+
匹配时表示 1 个或 1 个以上。
/[0-9][0-9]+/
两个或两个以上数字。
/[0-9][0-9]*/
一个或一个以上数字。
FILENAME
文件名。
OFS
输出字段分隔符, 默认也是空格,可以改为制表符等。
ORS
输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕。
-F’[:#/]’
定义三个分隔符。
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三种方式
命令行方式
awk [-F field-separator] 'commands' input-file(s)
其中,commands 是真正 awk 命令,[-F 域分隔符] 是可选的。 input-file(s) 是待处理的文件。
在 awk 中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名 -F 域分隔符的情况下,默认的域分隔符是空格。
shell脚本方式
将所有的 awk 命令插入一个文件,并使 awk 程序可执行,然后 awk 命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。相当于 shell 脚本首行的:
#!/bin/sh
可以换成:
#!/bin/awk
awk文件
将所有的 awk 命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f 选项加载 awk-script-file 中的 awk 脚本,input-file(s) 跟上面的是一样的。
Linux awk命令常用实例
实例
实例
描述
awk ‘{print $1,$4}’ file
以空格或者 tab 分隔显示第一列和第四列
awk -F : ‘{ print $1,$2 }’ file
以冒号分隔,显示第一列和第二列
awk -va=1 ‘{print $1,$1+a}’ file
通过 v 参数设置变量
awk ‘$1>2’ file
过滤出第一列大于 2 的列
awk ‘$1==2 {print $1,$3}’ file
过滤第一列等于 2 的列
awk ‘$1>2 && $2==“Hello” {print $1,$2,$3}’ file
过滤第一列大于 2 并且第二列等于 ‘Hello’ 的行
awk ‘$2 ~ /th/ {print $2,$4}’ file
输出第二列包含 “th”,并打印第二列与第四列
awk '/haicoder/ ’ file
输出包含 “haicoder” 的行
awk ‘BEGIN{IGNORECASE=1} /haicoder/’ log.txt
忽略大小写
awk ‘length>80’ file
从文件总取出长度大于 80 的行
awk -F ‘:’ ‘BEGIN {print “start1,start7”} {print $1 “,” $7} END {print “end1,end7”}’ file
显示文件的第 1 列和第 7 列,用逗号分隔显示,所有行开始前添加列名 start1,start7,最后一行添加,end1,end7
awk -F : ‘{ print NR " " NF " " $0 }’ file
统计文件中,每行的行号,每行的列数,对应的完整行内容
awk ‘BEGIN { print length(“Hello HaiCoder”) }’
输出字符串长度
awk -F ‘:’ ‘{ print toupper($1) }’ file
第一列转成大写
awk -F ‘:’ ‘{ if ($1 > “d”) { print $1 } else { print “-” } }’ file
输出第一个字段的第一个字符大于 d 的行
空格分隔打印列
语法
awk '{print $1,$4}' file
案例
我们使用
2 this is first line
3 www.haicoder.net
haicoder:linux
HAICODER:NET
8 haicoder python
haicoder:golang
现在,我们使用 awk,以空格分隔,打印该文件的第一列和第二列,具体命令如下:
awk '{print $1,$2}' haicoder.txt
运行后,终端输出如下:
我们看到,我们使用了 awk 命令,打印了文件的第一行和第二列的内容。
awk指定分隔符
语法
awk -F : '{ print $1,$2 }' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
www.haicoder.net:module:category:article:linux
haicoder:server:linux:linux awk:article
HAICODER:javascript:vue:vue model:module
现在,我们使用 awk,以冒号分隔,打印该文件的第一列和第四列,具体命令如下:
awk -F : '{ print $1,$4 }' haicoder.txt
运行后,终端输出如下:
我们看到,我们使用了 awk 命令,并指定了分隔符,打印了文件的第一行和第四列的内容。
awk设置变量
语法
awk -va=1 '{print $1,$1+a}' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.haicoder.net:python
6:haicoder:golang
现在,我们使用 awk,设置一个变量,并将第一列的所有值加上该变量,并打印该文件的第一列和第三列,具体命令如下:
awk -va=10 '{print $1,$1+a}' haicoder.txt
运行后,终端输出如下:
我们看到,我们使用了 awk 命令,并设置了变量,打印了文件的第一行和加完变量之后的值。
awk大于过滤
语法
awk '$1>5' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.haicoder.net:python
6:haicoder:golang
现在,我们使用 awk,以冒号分隔,并过滤出第一列大于 5 的列,具体命令如下:
awk -F':' '$1>5' haicoder.txt
运行后,终端输出如下:
我们看到,我们使用了 awk 命令,以冒号分隔,打印了第一列大于 5 的行,同时,我们还可以继续使用管道命令,打印出,过滤出来的行的指定列,具体命令如下:
awk -F':' '$1>5' haicoder.txt | awk -F':' '{print $2}'
运行后,终端输出如下:
我们看到,此时输出了我们过滤出来的行的第二列,当然,我们也可以不使用管道,直接打印,具体命令如下:
awk -F':' '$1>5 {print $2}' haicoder.txt
运行后,终端输出如下:
我们看到,同样实现了效果。
awk与逻辑
语法
awk '$1>2 && $2=="www.haicoder.net" {print $1,$2,$3}' haicoder.txt
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.haicoder.net:python
6:haicoder:golang
现在,我们使用 awk,以冒号分隔,并过滤出第一列大于 2 的列并且第二列等于 “haicoder” 的行,我们打印出第一列、第二列和第三列,具体命令如下:
awk -F':' '$1>2 && $2=="haicoder" {print $1,$2,$3}' haicoder.txt
运行后,终端输出如下:
我们看到,我们实现了打印第一列大于 2 的列并且第二列等于 “haicoder” 的行。
awk某一列包含字符串的行
语法
awk '$2 ~ /str/ {print $2,$4}' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.haicoder.net:python
6:haicoder:golang
现在,我们使用 awk,以冒号分隔,并过滤出第二列包含 www 的行,我们打印出第二列和第三列,具体命令如下:
awk -F':' '$2 ~ /www/ {print $2,$3}' haicoder.txt
运行后,终端输出如下:
我们看到,我们实现了打印第二列包含 www 的行并且输出了第二列和第三列的内容。
awk包含字符串的行
语法
awk '/haicoder/' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.haicoder.net:python
6:haicoder:golang
现在,我们使用 awk,打印出包含 python 的行,具体命令如下:
awk '/python/' haicoder.txt
运行后,终端输出如下:
我们看到,我们实现了打印了包含 python 的行。
awk忽略大小写
语法
awk 'BEGIN{IGNORECASE=1} /haicoder/' log.txt
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.HAICODER.net:python
6:coder:golang
现在,我们使用 awk 忽略大小写,打印出包含 haicoder 的行,具体命令如下:
awk 'BEGIN{IGNORECASE=1} /haicoder/' haicoder.txt
运行后,终端输出如下:
我们看到,我们实现了忽略大小写打印了包含 haicoder 的行。
awk获取行长度
语法
awk 'length>80' file
案例
我们使用 vim 新建一个文件 haicoder.txt,并写入如下内容:
1:haicoder.net:linux
3:www.HAICODER.net:python
6:coder:golang
现在,我们使用 awk 过滤出长度大于 20 的行,具体命令如下:
awk 'length>20' haicoder.txt
运行后,终端输出如下:
我们看到,我们实现了打印了长度大于 20 的行。
Linux文件处理awk命令详解总结
Linux 中的 awk 是一个强大的文本分析工具,简单来说 awk 就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网相关推荐
- linux修改zip中文件,Linux下修改jar、zip等文件内的文件详解
Linux下修改jar.zip等文件内的文件详解 Linux下修改jar.zip等文件内的文件详解 看到很多同事在Linux环境下修改jar包内的文本文件或zip中的文本文件时,经常是先把jar包或z ...
- Linux 下的用户、用户组、文件权限设置
给用户增加执行权限 chmod u+x a.txt 给用户所属组增加写权限,其他用户删除读权限 chmod g+w,o-r a.txt 给用户所属组增加读写执行权限 chmod g=rwx a.txt ...
- linux如何将ntfs删除文件,【实习记】2014-09-26恢复linux下误删的ntfs盘中的文件
情景,ubuntu下把NTFS格式的盘中的"实习记"文件夹彻底删除了,追毁莫及,粗心觉不是一件好的事情. linux下回复ntfs盘下的文件不能用ext3grep,而使用debug ...
- linux下使用openssl和md5sum加密文件或者字符串
linux下使用openssl和md5sum加密文件或者字符串 前言 1 用oppnssl md5 加密字符串和文件的方法 1.1 oppnssl md5 加密字符串的方法 a.手动输入命令及过程如下 ...
- Linux下scp无密码上传 下载 文件 目录的方法
这篇文章主要介绍了Linux下scp无密码上传 下载 文件 目录的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在Linux下远程备份的时候,需要配置scp的 无密码复制文件.目录.就把这个 ...
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- linux文件系统添加pcm,linux下用sox批量将pcm文件加wav头、批量修改采样率、切音频...
linux下用sox可以给pcm文件加头 例如:test.pcm是不带wav头的pcm文件 $ sox -t raw -c 1 -e signed-integer -b 16 -r 16000 tes ...
- Linux 下的0 1 2特殊文件描述符~
最近在做项目的时候遇到的几个知识点,我觉得非常有意思,以前学Linux的时候也有接触到管道方面的,但是在应用中却基本没有遇到过. 还有Linux下的几个特殊的文件描述符,用这几个文件描述符可以做很多事 ...
- 自动修改linux下/etc/sysconfig/network-scripts/ifcfg-ethX网卡文件的脚本
此脚本修改linux下/etc/sysconfig/network-scripts/ifcfg-ethX网卡文件中的网卡一.网卡二的IP地址(IPADDR).子网掩码(NETMASK)信息 #!/bi ...
最新文章
- (iOS-基本知识)Category VS Extension 原理详解
- 外国人看我国量子计算机祖冲之号,1.2小时完成超算8年!我国“祖冲之号”量子计算机刷新记录...
- 支持向量机SVM 简要推导过程
- 数据结构——二叉树的最长路径问题
- bom_clear.php,thinkphp清除BOM方法
- Apt-get使用指南
- Ubuntu apt-get 卸载命令
- LeetCode 1738. 找出第 K 大的异或坐标值(DP)
- Java核心类库篇1——简介
- python训练的模型怎么在C++使用?
- jsp ajax聊天室,jsp+servlet实战酷炫博客+聊天系统
- C语言 main函数
- linux镜像默认的安装位置,Linux下正确修改Docker镜像和容器的默认存储位置,亲测有效...
- SCI从入门到精髓(三)——如何写出牛文章
- mysql mgr 读写分离_MySQL Group Replication mgr 单主 proxysql 读写分离配置过程
- 安卓日记本设计内容介绍_天一 | 教你捷径,使用VB开发安卓程序!
- 实际打印页码偏上_4个Excel打印小技巧,想怎么打就怎么打?
- 单片机74LS164C语言例子,51单片机控制74LS164芯片输出64位的数组
- m3u8转换到mp4 python_如何把m3u8格式转换成mp4格式?
- memmove函数c语言实现,【C语言】实现memcopy、memmove函数