Linux系统之文本格式化工具awk

一、文本处理工具

grep、sed和awk都是文本处理工具,虽然都是文本处理工具但却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍。

grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多;

sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed;

awk:报告生成器,格式化以后显示。如果对处理的数据需要生成报告之类的信息,或者你处理的数据是按列进行处理的,最好使用awk。

二、awk可以完成的一些功能

将文本文件看做由记录和字段组成的文本数据库

使用变量操作数据库

使用算术和字符串操作符

使用普通的程序设计结构,例如循环和条件

生帮格式化报告

定义函数

从脚本中执行unix命令

处理unix命令的结果

更加巧妙的处理命令行的参数

更容易地处理多个输入流

三、语法格式

1

2

 

# awk [options] 'script' file1 file2, ...

# awk [options] 'PATTERN { action }' file1 file2, ..

 

1、选项

-F fs or --field-separator fs:

指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:

1

2

3

4

 

#awk -F: '/root/{print $1,$NF}' /etc/passwd

#awk -F: '/root/{print $1$NF}' /etc/passwd

#awk -F: '/root/{print $1 $NF}' /etc/passwd

#awk -F: '/root/{print $1"#"$NF}' /etc/passwd

 

wKioL1NBJRmCP3i8AAHmFxB5UOc722.jpg

-v 选项定义的变量在脚本运行之前即存在,可以在脚本的 BEGIN 流程中被调用;

wKioL1NBJo6ggoygAADZ-2DtPuQ717.jpg

2、awk的输出:print和printf

⑴、print的使用格式:

print item1, item2, ...

要点:

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

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

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

注意,在AWK中,$表示字段,用户变量不需要加$,这是AWK与shell或者Perl不同之处!在shell中,变量定义时不加$,再次引用时则需要用$,而在Perl中,无论定义和引用时都需要加$ (Perl中$表示标量,另有@和%符号表示数组和Hash变量)。

实例

wKiom1NBKS_BwfM0AACZkFzCp_s795.jpg

⑵、printf的使用格式

printf format, item1, item2, ...

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

%c

转换数字成ASCII,如printf "%c", 67结果为C。

wKiom1NBKiCgOr_tAABvKrxuDWw453.jpg

%d, %i

打印十进制整数,如printf "%dn", 6.745结果为6。

wKioL1NBKk3QABhtAAC4294mCiU316.jpg

%e, %E

转换数字为科学(指数)符号,如printf "%4.3en", 6745结果为6.745e+03。

wKioL1NBKz7j69JLAAFlB4E30yc055.jpg

%f

以浮点表示法打印数字,如 printf "%4.3f\n", 6745结果为6745.0000000

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15553.html