Linux awk 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux awk 命令。

1、命令简介

awk用于在linux/unix下对文本和数据进行处理。而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

2、命令用法

awk 'Program' input-file1 input-file2 ... awk -f PROGRAM-FILE input-file1 input-file2 ...

3、命令描述

awk命令在文件中搜索包含模式的文本。当一行或文本匹配时,awk对该行/文本执行特定的操作。Program语句告诉awk该执行什么操作;程序语句由一系列“规则”组成,其中每个规则指定要搜索的模式,以及在找到特定模式时要执行的操作。用斜杠(/)括起来的正则表达式是一个awk模式,用于匹配其文本属于该集合的每个输入记录。

4、命令选项

标签

描述

-F FS

--field-separator FS

使用FS作为输入字段分隔符('FS'预定义变量的值)。

-f PROGRAM-FILE

--file PROGRAM-FILE

从文件PROGRAM-FILE中读取awk程序源,

而不是从第一个命令行参数中读取。

-mf NNN

-mr NNN

'f'标记设置字段的最大数量,

'r'标记设置记录的最大大小。

这些选项会被'gawk'忽略,

因为'gawk'没有预定义的限制;

它们只是为了与贝尔实验室的Unix awk研究版本兼容。

-v VAR=VAL

--assign VAR=VAL

在程序执行开始之前给变量VAR赋值VAL。

-W traditional

-W compat

--traditional

--compat

使用兼容性模式,

在这个模式下'gawk'扩展是关闭的。

-W lint

--lint

对可问题的或不可移植的awk构造给出警告。

-W lint-old

--lint-old

对于awk的原始版本7 Unix版本中

不可用的构造发出警告。

-W posix

--posix

使用POSIX兼容模式,

在这种模式下关闭"gawk"扩展,

并应用其他限制。

-W re-interval

--re-interval

允许在regexp中使用间隔表达式。

-W source=PROGRAM-TEXT

--source PROGRAM-TEXT

使用PROGRAM-TEXT作为awk程序源代码。

这个选项允许混合命令行源代码

和来自文件的源代码,

对于混合命令行程序和库函数特别有用。

--

标记选项结束。

这对于允许awk程序本身的进一步

参数以'-'开头非常有用。

这主要是为了与POSIX参数解析约定保持一致。

'Program'

patterns 和 actions 

Input-File

如果没有指定Input-File ,

则awk将程序应用于“standard input”,

(一些其他命令或终端的管道输出。

键入的输入将一直持续到

文件结束(键入'Control-d')

5、使用示例

1)执行ls -l命令的结果中每一行输出中返回第二项($2)

$ ls -l | awk '{print $1}'
total
drwx------+
drwx------+
drwx------+
drwx------@
drwx------
drwx------+
drwx------+
drwxr-xr-x+
drwxr-xr-x
drwxr-xr-x
drwx------
drwxr-xr-x
-rw-r--r--
-rw-r--r--

2)打印ls -l每一行的第二和第三个字段:

$ ls -l | awk '{ print $2,$3 }'
16 
3 levizhong
5 levizhong
12 levizhong
85 levizhong
3 levizhong
4 levizhong
4 levizhong
4 levizhong
3 levizhong

3)以特定格式输出passwd字符

$ awk -F: '{printf "%-15s->%10s ->%20s\n",$1,$(NF-3),$NF}' /etc/passwd|head -2

4)计算文件中的行数

$ awk 'END { print NR }' demo.txt
3

5)打印输出从0到100(包括100在内)的七个随机数

$ awk 'BEGIN { for (i = 1; i <= 7; i++) print int(101 * rand()) }'
84
39
79
80
92
19
33

6)打印输出最长输入行的长度

$ awk '{ if (length($0) > max) max = length($0) } END { print max }' demo.txt
28

7)从文件中打印输出非空行

$ awk 'NF > 0' demo.txt

推荐阅读
cjavapy编程之路首页