Linux awk

栏目: 服务器 · 发布时间: 7年前

内容简介:Linux awk

什么是awk?

awk是 Linux 下面的一个命令行工具,相比于sed,awk不仅可以以行为单位进行处理文件,还能以列为单位处理文件;同时,它还是一种编程语言,用来在Linux/Unix下对文本和数据进行处理,数据既可以来自标准输入,也可以来自一个或者多个文件。

处理文件的方式

awk处理文本和数据的方式和sed相似,都是逐行扫描文件,从第一行到最后一行,然后通过正则表达式寻找匹配的特定模式的行,并在这些行上进行你自定义的操作(操作一般是打印~)如果没有指定匹配模式,那么所有的数据都会被进行处理。

awk的命令格式和选项

命令行语法格式

awk     [-F     field-separator]    'commands'      input

awk脚本文件格式

awk  -f     awk-script-file     input-file

命令选项

-F fs:表示指定输入文件分隔符。

-v var=value:表示赋值一个用户定义变量。

–asign var=value:同上。

-f scriptfile or –file scriptfile:从脚本文件中读取awk命令。

使用方法

awk     [option]    '{pattern + action }'   filename

pattern:表示awk在数据中查找的内容。

action:表示是在找到的匹配内容时所执行的一系列指令。

模式

awk是由模式和操作组成的: pattern {action}

两者是可选的,如果没有模式,则action应用到全部记录(行)。

如果没有action,则输出全部匹配的记录。

默认情况下,每一个输入行都是一条记录,用户可以通过 RS变量 或者 -F选项 来指定不同的分隔符进行分割。

例如:

[lzh@leap_ awk_test]$ cat file
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120
[lzh@leap_ awk_test]$ awk '{print $1}' file                   //只有action没有pattern
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120
[lzh@leap_ awk_test]$ awk '/^Product/' file                //只有pattern没有action
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120

模式的类型

关于模式可以是一下的任意一个:

1. 正则表达式

2. 关系表达式

3. 模式匹配表达式(~和!)

4. BEGIN:让用户指定第一条输入记录在被处理之前所发生的动作,可以在Begin中设置全局变量。

5. END:让用户在最后一条输入记录被读取之后所发生的动作。

awk的常用环境变量

$n:表示当前记录的第n个字段,字段之间由域分隔符分隔。

$0:表示完整的输入记录。

ARGC:表示命令行参数的数目。

[lzh@leap_ awk_test]$ awk 'BEGIN{ print ARGC}{print $1}' file
2
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120

ARGIND:表示命令行中当前文件的位置。

ENVIRON:表示环境变量关联的数组。

FILENAME:表示当前文件名。

FS:表示输入域分隔符。

[lzh@leap_ awk_test]$ awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd | head -n 3
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin
filename:/etc/passwd,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

FNR:表示浏览文件的记录数。

[lzh@leap_ awk_test]$ awk -F: 'BEGIN{ print FNR }{print $1,FNR}' file
0
ProductA 1
ProductB 2
ProductC 3
ProductD 4
ProductE 5
ProductF 6

OFS:表示输出域分隔符。

ORS:表示输出记录分隔符。

[lzh@leap_ awk_test]$ awk -F: 'BEGIN{ OFS="###"} {print $0,$1,$2}' file
ProductA:20###ProductA###20
ProductB:50###ProductB###50
ProductC:20###ProductC###20
ProductD:30###ProductD###30
ProductE:99###ProductE###99
ProductF:120###ProductF###120

来个例子找出一个人目录下文件的大小,并计算出总大小。

[r[root@leap_ awk_test]# ls -lR /home/lzh/code | awk 'BEGIN{size=0}/^-/{size+=$5; print $9,$5} END{printf("total:%d\n",size);}' | tail -n 10
test.c 233
3_class.tar 20480
3_class.tgz 2922
proc.c 0
a.out 6474
file1.txt 270
file.txt 1405
test.c 125
test.cpp 273
total:268757855

以上所述就是小编给大家介绍的《Linux awk》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

虚拟经济学

虚拟经济学

威利•莱顿维塔、爱德华•卡斯特罗诺瓦 / 崔毅 / 中国人民大学出版社 / 2015-6 / 49.00元

电子游戏中也存在 “看不见的手”吗?玩虚拟游戏能够创造真实价值吗?为什么现实世界需要虚拟经济?经济学作为一门成熟的学科,起源于对农业、制造业和商业的探究,曾经作为解决饥饿、就业这些人类所面对的真实问题的方法。然而,在虚拟世界,最为稀缺的资源不再是食物和住所,而是人类的关注度。一些基于农业、制造业和商业存在的经济学理论、概念依然适用于游戏中的虚拟世界,比如最为人们所熟知的“看不见的手”这一概念。同时......一起来看看 《虚拟经济学》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具