linux awk命令使用的一些心得--参数和内置属性

1、内置变量

NF 当前行有多少片,则$NF表示当前行的最后一个值

例子:

#awk ‘{print $NF}‘ 1 ;  //打印一行的倒数第一个值
#awk ‘{print $(NF-1)}‘ 1  //打印一行的倒数第二个值

FS 输入的段分隔符

#awk -v FS=: ‘{print $1}‘ /etc/passwd   //   -v 定义一个变量

OFS 输出的段分隔符

#awk -v OFS=: ‘{print $1,$2}‘ /etc/passwd

2、操作符

算术操作符

-x:负值

+x:转化为数值

x^y:x的y次方

x**y:x的y次方

x*y:x乘以y

x/y:x除以y

x+y:

x-y:

x%y:取余

字符操作符

只有一个,用于字符串连接

linux1:/home # awk ‘BEGIN{print "a""b"}‘
ab
linux1:/home # awk ‘{print "a""b"}‘
ab
 
ab

没有begin关键字,则需要回车后,才会显示,而且不会退出

赋值操作符

=

+=

-=

*=

/=

%=

^=

**=

++

--

如果某模式为=号,应以/[=]/替代

布尔值

任何非0值或非空字符串都为真,反之为假,跟bash中刚好相反

比较操作符

x<y

x<=y

x>y

x>=y

x==y

x!=y

x~y:y是模式,x的字符串能否被y匹配到

linux1:/home # awk -F: ‘$1 ~ /^root/ {print $3,$4,$NF}‘ /etc/passwd
0 0 /bin/bash

$1符合/^root/匹配的行

x!~y:x不能被y模式匹配到则为真

表达式间逻辑

&&

||

条件表达式

Selector?if-true-exp:if-false-exp

A=3

B=4

$A>$B:echo
$A:echo $B

函数调用

Function_name
(para1,para2)

3、模式用法-pattern

常见类型

Regexp:正则表达式 
/regexp/,需要用/ /包括

expresssion:表达式,其值非0或非空字符串

Awk -F:
‘$3>=500 {print $1 $3}‘ /etc/passwd

Ranges:指定匹配范围,格式为pat1,pat2

匹配符合pat1的行到符合pat2的行范围内的行

BEGIN/END 在真正的action前或后只执行一次

linux1:/home # awk -F: ‘BEGIN{print "Username   is"}$3>500 {printf "%-15s%s\n", $1,$3}END{print "file is end"}‘ /etc/passwd
Username    is
nobody         65534
sybase         1000
exbadm         1001
tcqs           1002
tomcat         1003
dasusr1        1004
db2inst1       1005
db2fenc1       1006
iccs           1007
chenjie        1008
uftp           1009
inter1         1010
file is end

可在BEGIN中变量赋值

#awk ‘BEGIN{FS=":"}{print $1}‘ /etc/passwd

空模式:匹配任意输入行

4、action

Expressions

Control
statement

If-else

语法:

if(condition){then-body} else {else body}
linux1:/home # awk -F: ‘{if ($3==0) print $1,"Admin";else print $1,"Common
User"}‘ /etc/passwd
root Admin
bin Common User
daemon Common User
lp Common User
mail Common User
games Common User
wwwrun Common User

While

语法:

While
(condition){statement;statemnet2;…}

linux1:/home #awk -F:‘{i=1;while(i<=3) {print $i;i++)}‘ /etc/passwd
linux1:/home # awk -F: ‘{i=1;while (i<=3){printf "%-15s", $i;if(i==3){printf
"\n"};i++}}‘ /etc/passwd
root           x              0             
bin            x              1             
daemon         x              2             
lp             x              4             
mail           x              8             
games          x              12

Do-while

语法:

Do
{statement 1,statement2} while(condition)

至少会执行一次

For

#awk -F:‘{for(i=1;i<=NF;i+=2) print $1}‘ /etc/passwd

for遍历

Case

break和continue

Compound
statement 函数调用

Input
statement

Output
statement

5、数组

Array[index-expression]

index-expression可以是任意字符

引用时不需要用$

linux1:/home # awk ‘BEGIN{A["x"]="hello";A["y"]="world";print A["x"],A["y"]}‘
hello world

要遍历数组,使用

For(A in array){print array[A]},A为array的下标,如果下标为数字,则不需要双引号

linux1:/home # awk ‘BEGIN{A["x"]="hello";A["y"]="world";for(B in A) print A[B]}‘
hello
world

例子

netstat -ant| awk ‘$1~/tcp/{S[$NF]++}END{for (A in S){print A,S[A]}}‘
LISTEN 19
ESTABLISHED 21
TIME_WAIT 2

显示netstat -ant出来的状态,统计不同状态的个数

6、内置函数

Split(String,array[,fieldsep[,seps]])

将string标的的字符串以fieldsep为分隔符进行分隔,并将分隔后的结果保存至array为名的数组中

linux1:/home #netstat -ant|awk ‘/:80/{split($5,clients,":");IP[clients[1]]++}END{for( i in IP){print IP[i],i}}‘
3 0.0.0.0

访问80端口的ip链接及数量

Length([string]) 返回string字符串中字符的个数;

Substr(string,start[,length])取string字符串中的子串,从start开始,取length个,start从1开始计数

System(command) 执行系统命令并将结果返回至awk

systime() 取系统当前时间

时间: 2024-10-26 13:02:04

linux awk命令使用的一些心得--参数和内置属性的相关文章

linux awk命令使用的一些心得-基础命令

该工具的作用是将文本文件逐行读入,然后对读入文本进行切片(默认用空格分隔),然后再读入下一行,已提供使用.是一个格式化报告生成工具,然后用来处理文本. 当前,linux上使用的awk,是gawk(开源awk),简写为awk. 用法: #awk [options] 'script' file,file2,- #awk [options] 'PATTERN {action }' filelist 引用的话,每一行从$1开始,$0为当前行,以换行符作为行结束 常用为:awk '{print $1}'

Linux awk 命令详解

简介linux awk命令详解 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的

linux awk命令详解(都是常用命令)

原文:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它

Linux awk命令简单操作

AWK Command: 一 : print print item1,item2,.......... 要点: 1.各项目之间使用逗号隔开,而输入时则以空白字符分隔 2.输出的item可以为字符串或树枝,当前记录的字段(如$1).变来那个或awk的表达式,树枝会转换成字符串 3.print命令后面的item可以省略,此时其功能相当于print $0,以此,如果想输出空白行,则需要print "" 例子: 1.awk 'BEGIN { pring "line one\n lin

LINUX - awk命令之NF和$NF区别 (转)

NF和$NF 区别问答:(转)1.awk中$NF是什么意思?#pwd/usr/local/etc~# echo $PWD | awk -F/ '{print $NF}'etcNF代表:浏览记录的域的个数$NF代表:最后一个Field(列) 2.awk下面的变量NF和$NF有什么区别?{print NF} 也有{print $NF}前者是输出了域个数,后者是输出最后一个字段的内容如:~# echo $PWD | awk -F/ '{print $NF}' LINUX - awk命令之NF和$NF区

linux awk命令分析http server访问日志

摘抄自http://www.ibm.com/developerworks/ AWK 简介 AWK 是一种"样式扫描和处理语言".它允许您创建简短的程序,这些程序读取输入文件.为数据排序.处理数据.对输入执行计算以及生成报表.它的名称取自于它的创始人 Alfred Aho. Peter Weinberger 和 Brian Kernighan 姓氏的首个字母. 本文论述的 awk 命令主要指 Linux 操作系统中广泛包含的内置程序 /bin/gawk,它是 Unix awk 程序的 G

Linux awk命令详解??????????(研究)

http://blog.chinaunix.net/uid-25120309-id-3801250.html 一.  AWK 说明  awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用. awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上

Linux awk命令

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域.默认域分隔符是"空白键" 或 "[tab]键" 示例:#cat /etc/passwd |awk 

Linux awk 命令 说明

一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.它在命令行中使用,但更多是作为脚本来使用. awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作.如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的