awk释义

中文释义:三位创造者Aho、Weinberger和Kernighan统称.

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
最简单地说, AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。


awk 具有语言的特性。但是内置函数有限,没有C语言强大。awk是一种解释的编程语言。awk也是shell过滤工具中最难掌握的。awk是一种自解释的编程语言。结合awk和sed和grep,将会使awk编程更加容易。awk语言最基本的功能是在文件或字符串中基于指定的规则浏览和抽取信息。

awk
在awk中有四种概念。
1.抽取域
2.匹配正则表达式
3.比较域
4.向awk传递参数
在awk中调用系统变量必须用单引号,如果是双引号,则表示字符串
默认分割符 :空格
BEGIN 表示在处理任意行之前进行的操作。
BEGIN {}{}end {}
BEGIN 在读取文本之前执行,end在读取文件后执行

-F 指定分割符如果不加F 表示默认为分割方式为空格
如果想加:为分割符。则“:”


NR 制订内置变量
例子1:awk ' {print NR}'install.log.syslog #打印install.log.syslog 有多少行。输出结果是挨着显示
执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15


119

例子2 :awk 'END {print NR}'install.log.syslog # 加了END 只显示最后结果行数
显示结果如下:
119



NR 表示当前第几行


NF 表示当前为第几列
例子1
awk ' {print NF}' install.log.syslog #表示这个文件总过的列数
显示结果:
10
9
8
11
10

FS

OFS

NRS

length

system


例1
比较
如小于: #awk 'if($1<$2) print $1' myfile #语法不完整
正确语法:
awk '{if($1<$2) print $1}' aa01.txt#省略BEGIN 和 END ‘' 中间是程序的主体部分。要用{}扩起来



例如:打印倒数第二行 awk '{print $NF-1}' aa01.txt

awk '{print $1 }'

$1 表示打印第一行
awk '$1!~/name/{print $1 }' aa01.txt

#awk默认是以行为单位处理文本的,对1.txt中的每一行都执行后面 "{ }" 中的语句。
awk中的两个术语:
记录(默认就是文本的每一行)
$0就表示一个记录,$1表示记录中的第一个字段。
一般 print $0 就是打印整行内容($0前面不需要反斜杠),print $1表示只打印每行第一个字段。
$0 表示所有内容#

#!感叹号表示取反,不匹配
#~表示匹配的意思
表示匹配第一行
#//里面表示匹配的内容。固定格式



awk 'BEGIN{n=0}{if($2<60)n++}END{print n}' aa01.txt
表示打印英语不及格的人数为2


打印最后4行
n='awk 'END{print NR}' aa01.txt
awk -v m=‘awk ’END{print NR}' aa01.txt' '{if(NR>m-3)print $0}‘ aa01.txt

例子:用awk 统计总成绩
第一步:编辑一个文件aa02.txt
编辑如下:
{ n=0 #初始值为0
if(NR>1) #让行数大于1

{
for(i=2;i<=NF;i++) #从第二行开始计算,i小于等于NF行

{
n= n+$i; 成绩总分为 n+si行

}
print $1":"n; #打印第一行总成绩
}
}

第二步:执行
awk -f aa02.txt aa01.txt
结果为:
zhangsan:244
lisi:218
wangwu:146
songqi:150

awk打印字符数

echo "this is hong yi"|awk '{print length($0)}'

结果为:15









wc

wc -c filename:显示一个文件的字节数

wc -m filename:显示一个文件的字符数

wc -l filename:显示一个文件的行数

wc -L filename:显示一个文件中的最长行的长度

wc -w filename:显示一个文件的单词数