linux-awk
Awk学习笔记整理:Jims of 肥肥世家<jims.yang@>Copyright © 2004 本文遵从GPL协议,欢迎转载、修改、散布。
第一次发布时间:2004年8月6日Table of Contents1. awk简介2. awk命令格式和选项2.1. awk的语法有两种形式2.2. 命令选项3. 模式和操作3.1. 模式3.2. 操作4. awk的环境变量5. awk运算符6. 记录和域6.1. 记录6.2. 域6.3. 域分隔符7. gawk专用正则表达式元字符8. POSIX字符集9. 匹配操作符(~)10. 比较表达式11. 范围模板12. 一个验证passwd文件有效性的例子13. 几个实例14. awk编程14.1. 变量14.2. BEGIN模块14.3. END模块14.4. 重定向和管道14.5. 条件语句14.6. 循环14.7. 数组14.8. awk的内建函数15. How-to1. awk简介awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
数据可以来自标准输入、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。
它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
awk分别代表其作者姓氏的第一个字母。
因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
下面介绍的awk是以GUN的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk进行介绍。
2. awk命令格式和选项2.1. awk的语法有两种形式∙awk [options] 'script' var=value file(s)∙awk [options] -f scriptfile var=value file(s)2.2. 命令选项-F fs or --field-separator fs指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value赋值一个用户定义变量。
-f scripfile or --file scriptfile从脚本文件中读取awk命令。
-mf nnn and -mr nnn对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。
这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional在兼容模式下运行awk。
所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright打印简短的版权信息。
-W help or --help, -W usage or --usage打印全部awk选项和每个选项的简短说明。
-W lint or --lint打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old打印关于不能向传统unix平台移植的结构的警告。
-W posix打开兼容模式。
但有以下限制,不识别:\x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text使用program-text作为源代码,可与-f命令混用。
-W version or --version打印bug报告信息的版本。
3. 模式和操作awk脚本是由模式和操作组成的:pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。
默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。
3.1. 模式模式可以是以下任意一个:∙/正则表达式/:使用通配符的扩展集。
∙关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
∙模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
∙模式,模式:指定一个行的范围。
该语法不能包括BEGIN和END模式。
∙BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
∙END:让用户在最后一条输入记录被读取之后发生的动作。
3.2. 操作操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。
主要有四部份:∙变量或数组赋值∙输出命令∙内置函数∙控制流命令4. awk的环境变量Table 1. awk的环境变量5. awk运算符Table 2. 运算符6. 记录和域6.1. 记录awk把每一个以换行符结束的行称为一个记录。
记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS 中。
$0变量:它指的是整条记录。
如$ awk '{print $0}' test将输出test文件中的所有记录。
变量NR:一个计数器,每处理完一条记录,NR的值就增加1。
如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。
6.2. 域记录中每个单词称做“域”,默认情况下以空格或tab分隔。
awk可跟踪域的个数,并在内建变量NF中保存该值。
如$ awk '{print $1,$3}' test将打印test 文件中第一和第三个以空格分开的列(域)。
6.3. 域分隔符内建变量FS保存输入域分隔符的值,默认是空格或tab。
我们可以通过-F命令行选项修改FS的值。
如$ awk -F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。
可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk-F'[:\t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。
输出域的分隔符默认是一个空格,保存在OFS中。
如$ awk -F: '{print $1,$5}' test,$1和$5间的逗号就是OFS的值。
7. gawk专用正则表达式元字符一般通用的元字符集就不讲了,可参考我的Sed和Grep学习笔记。
以下几个是gawk专用的,不适合unix版本的awk。
\Y匹配一个单词开头或者末尾的空字符串。
\B匹配单词内的空字符串。
\<匹配一个单词的开头的空字符串,锚定开始。
\>匹配一个单词的末尾的空字符串,锚定末尾。
\w匹配一个字母数字组成的单词。
\W匹配一个非字母数字组成的单词。
\‘匹配字符串开头的一个空字符串。
\'匹配字符串末尾的一个空字符串。
8. POSIX字符集可参考我的Grep学习笔记9. 匹配操作符(~)用来在记录或者域内匹配正则表达式。
如$ awk '$1 ~/^root/' test将显示test 文件第一列中以root开头的行。
10. 比较表达式conditional expression1 ? expression2: expression3,例如:$ awk '{max = {$1 > $3} ? $1: $3: print max}' test。
如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
$ awk '$1 + $2 < 100' test。
如果第一和第二个域相加大于100,则打印这些行。
$ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
11. 范围模板范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。
如果有一个模板没出现,则匹配到开头或末尾。
如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。
12. 一个验证passwd文件有效性的例子$ cat /etc/passwd | awk -F: '\NF != 7{\printf("line %d,does not have 7 fields:%s\n",NR,$0)}\$1 !~ /[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%d: %s\n,NR,$0)}\$2 == "*" {printf("line %d, no password: %s\n",NR,$0)}'cat把结果输出给awk,awk把域之间的分隔符设为冒号。
如果域的数量(NF)不等于7,就执行下面的程序。
printf打印字符串"line ?? does not have 7 fields",并显示该条记录。
如果第一个域没有包含任何字母和数字,printf打印“no alpha andnumeric user id" ,并显示记录数和记录。
如果第二个域是一个星号,就打印字符串“no passwd”,紧跟着显示记录数和记录本身。
13. 几个实例∙$ awk '/^(no|so)/' test-----打印所有以模式no或so开头的行。
linux awk数组定义
linux awk数组定义
在Linux中,awk是一种强大的文本处理工具,它允许用户对文本文件进行逐行处理并提供了对数组的支持。
在awk中,数组是一种特殊的变量,用于存储一组值。
数组的定义可以通过以下方式实现:
1. 使用方括号定义数组元素:可以通过指定数组的索引值来定义数组元素。
例如,可以使用以下方式定义一个名为arr的数组:
arr[0] = "apple"
arr[1] = "banana"
arr[2] = "orange"
2. 使用for循环初始化数组:可以使用for循环来初始化数组元素。
例如,可以使用以下方式定义一个包含1到5的数组:
for (i=1; i<=5; i++) {。
arr[i] = i.
}。
3. 使用split函数创建数组:可以使用awk中的split函数将字符串分割成数组元素。
例如,可以使用以下方式定义一个包含以逗号分隔的字符串的数组:
split("apple,banana,orange", arr, ",")。
4. 使用数组字面量初始化数组:在较新版本的awk中,还可以使用数组字面量来初始化数组。
例如,可以使用以下方式定义一个包含多个元素的数组:
arr = ["apple", "banana", "orange"]
总之,以上是在Linux中使用awk定义数组的几种常见方法。
通过这些方法,用户可以灵活地处理文本数据并进行各种操作。
Linux常用基本命令:三剑客命令之-awk动作用法(1)
Linux常⽤基本命令:三剑客命令之-awk动作⽤法(1)1,多个动作,怎么写?ghostwu@dev:~/linux/awk$ cat host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254每个{}表⽰⼀个动作:ghostwu@dev:~/linux/awk$ awk'{print $1} {print $2}' host.txtnameip地址host1192.168.1.1host2192.177.81.1host310.0.0.5host4192.168.3.98host5192.168.3.98host6192.168.9.254他的等价形式,这种⽅式更符合我们的编程习惯,⼀个语句,⼀个分号。
ghostwu@dev:~/linux/awk$ awk'{print $1; print $2}' host.txtnameip地址host1192.168.1.1host2192.177.81.1host310.0.0.5host4192.168.3.98host5192.168.3.98host6192.168.9.254请注意与这种⽅式的区别:ghostwu@dev:~/linux/awk$ awk'{print $1, $2}' host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.2542,if语句ghostwu@dev:~/linux/awk$ cat ghostwu.txtghostwu 20manzhangsan 22lisighostwu 30manzhanzhao 40manpeter 20manzhanzhao 30manghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print }}' ghostwu.txtghostwu 20man如果是第⼀⾏,就输出, print 后⾯默认为$0( 当前⾏ ), 如果$0没有写ghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print $1, $2}}' ghostwu.txtghostwu 20ghostwu@dev:~/linux/awk$ awk'{ if(NR == 1){ print $1; print $2}}' ghostwu.txtghostwu203,利⽤if....else判断账户是普通⽤户还是系统⽤户ghostwu@dev:~/linux/awk$ awk -v FS=":"'{ if ( $3 < 1000 ){ print $1,"是系统⽤户"} else { print $1,"是普通⽤户" } }' /etc/passwd root 是系统⽤户ghostwu 是普通⽤户...4,if ... else... if嵌套ghostwu@dev:~$ awk'{ if( $2 > 0 ) { print "正数" } else if ( $2 == 0 ) { print "0" } else { print "负数" } }' num.txt正数负数ghostwu@dev:~$ cat num.txt1102 -10305,循环ghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 6; i++) { print i } }'1234566,while循环ghostwu@dev:~$ awk'BEGIN{ i = 1; do { print "ghostwu",i; i++ } while( i <= 3 )}'ghostwu 1ghostwu 2ghostwu 3ghostwu@dev:~$ awk'BEGIN{ i = 1; do { print "ghostwu"i; i++ } while( i <= 3 )}'ghostwu1ghostwu2ghostwu37,do ... while循环ghostwu@dev:~$ awk'BEGIN{ i = 1; do{ print "ghostwu"i; } while( i++ <= 3 ) }'ghostwu1ghostwu2ghostwu3ghostwu48,continueghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 3; i++ ){ if( i == 2 ){ continue; } print i; } }'139,breakghostwu@dev:~$ awk'BEGIN{ for( i = 1; i <= 3; i++ ){ if( i == 2 ){ break; } print i; } }'110, exit,终⽌程序执⾏,如果有END,跳转到END,如果没有,直接退出ghostwu@dev:~/linux/awk$ awk'BEGIN{ print "开始"} {print} END{ print "结束" }' ghostwu.txt开始ghostwu 20manzhangsan 22lisighostwu 30manzhanzhao 40manpeter 20manzhanzhao 30man结束ghostwu@dev:~/linux/awk$ awk'BEGIN{ print "开始";exit} {print} END{ print "结束"" }' ghostwu.txt开始结束11,next,让awk直接从下⼀⾏开始ghostwu@dev:~/linux/awk$ awk'{print;next;}' host.txtname ip地址host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254ghostwu@dev:~/linux/awk$ awk'{if( NR == 1 ){next;} print}' host.txt host1 192.168.1.1host2 192.177.81.1host3 10.0.0.5host4 192.168.3.98host5 192.168.3.98host6 192.168.9.254。
linux awk 正则
linux awk 正则
AWK是一种文本处理工具,它支持使用正则表达式进行模式匹配和处理。
以下是一些常见的AWK正则表达式:
1. 匹配整个字符串:/pattern/,例如:/hello/表示匹配字符串中的“hello”。
2. 匹配字符串的开头:/^pattern/,例如:/^hello/表示匹配字符串开头的“hello”。
3. 匹配字符串的结尾:/pattern$/,例如:/world$/表示匹配字符串结尾的“world”。
4. 匹配特定字符集合:/[characters]/,例如:/[abc]/表示匹配包含字符“a”、“b”、“c”的字符串。
5.匹配单个字符:/./,例如:/./表示匹配任何单个字符。
6.匹配重复次数:/{n,m}/,例如:/[0-9]{3,5}/表示匹配3到5个数字的字符串。
7. 匹配0次或1次:/pattern?/,例如:/colou?r/表示匹配包含单词“color”或“colour”的字符串。
8. 匹配1次或多次:/pattern+/,例如:/bo+n/表示匹配一个或多个字母“o”的字符串。
9. 匹配0次或多次:/pattern*/,例如:/go*/表示匹配一个或多个字母“o”的字符串。
10. 匹配非字符集中的字符:/[^characters]/,例如:/[^aeiou]/表示匹配不包含元音字母的字符串。
Linux命令高级技巧使用awk和正则表达式进行高级数据分析和处理
Linux命令高级技巧使用awk和正则表达式进行高级数据分析和处理在Linux操作系统中,awk和正则表达式是进行高级数据分析和处理的强大工具。
它们可以帮助我们从复杂的数据集中提取、转换和处理数据,大大提高工作效率。
本文将介绍如何使用awk和正则表达式进行高级数据分析和处理的技巧。
一、awk命令简介awk是一种用于处理文本文件的命令行工具,也是Linux系统中的一种编程语言。
它以行为单位,逐行读取输入文件,并根据用户指定的规则进行处理。
awk的核心是模式-动作对,即根据某个模式匹配到的行执行相应的动作。
它具有强大的文本处理能力,支持自定义变量和函数,灵活性和扩展性非常高。
二、正则表达式介绍正则表达式是一种用于描述文本模式的方法,它可以帮助我们在文本中进行复杂的匹配和搜索操作。
在awk命令中,正则表达式常用于模式匹配和数据提取。
正则表达式的基本语法包括:字符、元字符、字符类、量词、位置限定符等。
在awk命令中,可以使用正则表达式对文本进行模式匹配,从而提取出符合要求的数据。
三、使用awk和正则表达式进行数据分析1. 提取指定字段awk命令可以通过指定字段分隔符,提取出文本中的指定字段。
例如,假设我们有一个以逗号分隔的数据文件data.csv,每行包含姓名、年龄、性别等字段,我们可以使用以下命令提取出所有行的姓名字段:```awk -F ',' '{print $1}' data.csv```上述命令中的-F参数指定字段分隔符为逗号,$1表示第一个字段。
2. 基于正则表达式进行模式匹配awk命令可以使用正则表达式对文本进行模式匹配。
例如,我们可以使用以下命令提取出包含特定关键词的行:```awk '/keyword/ {print}' data.txt```上述命令中的/keyword/表示匹配包含关键词"keyword"的行。
3. 使用正则表达式进行模式替换awk命令除了可以进行数据提取外,还可以使用正则表达式进行模式替换。
Linux命令高级技巧使用awk命令进行文本处理和数据提取
Linux命令高级技巧使用awk命令进行文本处理和数据提取Linux命令高级技巧:使用awk命令进行文本处理和数据提取在Linux系统中,awk是一种强大的文本处理工具,它可以用于处理数据文件、生成报表以及提取文本中的特定信息。
awk命令的灵活和高效使得它成为Linux用户必备的工具之一。
本文将介绍awk命令的基本用法和高级技巧,帮助读者更好地利用awk进行文本处理和数据提取。
1. awk命令基本语法和工作原理awk命令的基本语法为:```awk 'pattern { action }' filename```其中,pattern是用于匹配文本的模式,action是在匹配成功后执行的操作。
awk处理文本的方式是逐行读取文件,按照指定的模式进行匹配,并执行相应的操作。
操作可以是打印、计算、替换等。
下面是一个简单的示例:```awk '/keyword/ { print $1 }' filename```该命令表示在filename文件中匹配包含关键字"keyword"的行,并打印每行的第一个字段。
2. 使用awk命令进行文本处理awk命令在文本处理方面有着广泛的应用。
它可以对文本进行排序、过滤、计算和格式化等操作。
下面介绍几个常用的awk命令技巧。
2.1 文本过滤和匹配通过awk命令可以方便地对文本进行过滤和匹配。
例如,要过滤出包含特定关键字的行,可以使用如下命令:```awk '/keyword/' filename```该命令将输出filename文件中所有包含关键字"keyword"的行。
2.2 提取字段awk命令可以提取文本中的指定字段。
字段之间以空格或制表符分隔,默认情况下,awk将每行数据的第一个字段标记为$1,第二个字段标记为$2,依此类推。
例如,要提取文件中的第二个字段,可以使用如下命令:```awk '{ print $2 }' filename```该命令将输出filename文件中每一行的第二个字段。
linux awk 统计字段最大值
linux awk 统计字段最大值在Linux 中,可以使用AWK 命令来统计字段的最大值。
AWK 是一种强大的文本处理工具,可以方便地对文本文件进行处理和分析。
下面是一个简单的示例,演示如何使用AWK 来统计字段的最大值。
假设我们有一个包含数字的文本文件data.txt,每行包含多个字段,我们想要找到每行中的最大值。
首先,让我们看一下 data.txt 文件的内容:```bash$ cat data.txt10 20 30 40 505 15 25 35 45100 200 300 400 500```现在,我们可以使用 AWK 来找到每行中的最大值。
下面是一个示例 AWK 命令:```bash$ awk '{max = $1;for (i = 2; i <= NF; i++) {if ($i > max) {max = $i;}}print "Max value in line " NR " is " max;}' data.txt```在这个示例中,我们使用了一个AWK 脚本来处理data.txt 文件。
在脚本中,我们首先将第一个字段的值赋给变量max,然后使用一个循环遍历每行的所有字段,如果发现有更大的值,就更新max 的值。
最后输出每行的最大值。
执行上述命令后,输出结果如下:```Max value in line 1 is 50Max value in line 2 is 45Max value in line 3 is 500```这样,我们就成功使用 AWK 统计了每行的最大值。
希望这个示例能够帮助你理解如何使用 AWK 统计字段的最大值!。
Linux的awk命令操作两列数相减
简单AWK命令使用
首先打开打开Linux的终端,利用Vi命令,新建并且编辑一个test.txt 文本,里面先输入需要操作的数据
Vi test.txt 命令编辑文本
编辑完成后按下ESC键然后SHIT: wq
退出编辑器
结果如下
输入完数据后
在终端利用cat语句查看文件结果如下
然后利用如下代码计算price与newprice的差值计算结果输出到屏幕的D-value列下面
代码:
awk '{ for(i = 1;i<=NF;i++){printf("%-15s",$i);}; if(NR!=1) print ($3 - $4);
else print("D-Value"); } ' test.txt
代码解释:
首先利用for循环输出每一行的所有域(也就是输出每一行的每一段的数据),for循环是以NF(列数)结束的,NF表示的是test.txt的列数,每一行的所有数据都输出完后,如果是第一行的话就输出D-value ,如果不是第一行的话就输出$3 - $4的结果。
这里是利用if 语句判断的,其中NR表示的是行数,输出语句printf("%-15s",$i)表达式是指左对齐输出,每个结果占15位多余的右边空格补齐,就是C 语言的输出方法,输出的计算结果如上图所示。
Linux命令高级技巧使用awk命令进行统计和计算
Linux命令高级技巧使用awk命令进行统计和计算在Linux操作系统中,awk命令是一种非常强大且灵活的文本处理工具。
它可以用于对文本文件进行数据提取、处理和分析。
在本文中,我们将介绍一些高级的awk命令技巧,重点是如何使用awk命令进行统计和计算。
一、awk命令简介awk是一种处理文本文件的命令行工具,在Linux系统中默认安装。
它以逐行扫描文本文件的方式工作,根据指定的规则来处理每一行的数据。
awk命令的语法通常为:```awk 'pattern {action}' file```其中,pattern用于匹配文本行,而action用于对匹配的行执行操作。
可以通过在pattern和action之间使用一些特殊的操作符和函数来实现更复杂的处理逻辑。
二、使用awk命令进行统计1. 行数统计使用awk命令可以轻松实现对文本文件行数的统计。
只需要将每一行视为一个记录,通过打印记录的数量即可得到行数。
具体命令如下:awk 'END{print NR}' file```其中,NR是awk内置的变量,表示当前记录(行)的数量。
使用END关键字可以确保在所有行处理完毕后才执行打印操作。
2. 字符数统计awk命令也可以用于统计文本文件中的字符数。
我们可以使用length函数来获取每一行的字符数,并将其累加得到总字符数。
具体命令如下:```awk '{count += length($0)} END{print count}' file```其中,$0表示当前行的内容,length函数用于计算当前行的字符数。
同样地,END关键字用于在所有行处理完毕后执行打印操作。
三、使用awk命令进行计算除了统计功能,awk命令还可以进行一些简单的数学计算。
我们可以使用awk的内置运算符和数学函数来实现。
1. 求和计算使用awk命令可以轻松实现对文本文件中数字列的求和计算。
假设要对某一列的数字进行求和,可以使用如下命令:awk '{sum += $1} END{print sum}' file```其中,$1表示当前行的第一个字段(列),sum是一个变量,用于累加每个字段的值。
Linux-awk文本处理工具六-日志关键字筛选
Linux-awk⽂本处理⼯具六-⽇志关键字筛选查看多少⾏?awk '{print NR}' access.log |tail -n1 ⽇期时间筛选检测awk '/Dec 10/ {print $0}' /opt/mongod/log/mongod.log 具体时间点⽇志检测awk '/Nov 11 16:24:17/ {print $0}' /var/log/secure nginx⽇志统计独⽴ip的个数awk '{print $1}' /access.log | sort | uniq | wc -l查询访问最多的前10个ipawk '{print $1}' /access.log | sort | uniq -c | sort -nr | head -10查看某段时间的grep "2017:0[3-6]" nginx.log |访问次数最多的IPnetstat -ntu | tail -n +3 | awk '{ print $5}' | cut -d : -f 1 | sort | uniq -c| sort -n -r | head -n 5tail -n +3 :去掉前两⾏。
awk '{ print $5}':取数据的低5域(第5列)cut -d : -f 1:取IP部分。
sort:对IP部分进⾏排序。
uniq -c:打印每⼀重复⾏出现的次数。
(并去掉重复⾏)sort -n -r:按照重复⾏出现的次序倒序排列。
head -n 5:取排在前5位的IPshell统计⼀天 access.log ⽇志每⼩时每IP访问次数awk -vFS="[:]" '{gsub("-.*","",$1);num[$2" "$1]++}END{for(i in num)print i,num[i]}' logs/access.log进程显⽰ ps列出ttlsa的pid,然后依次kill 掉ps -ef | grep root | awk '{ print $2 }' | sudo xargs kill -9打印进程号;ps -ef | grep tomcat | grep -v grep | awk '{print $2}'打印 tomcat 进程并删除进程;ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -统计每⼀个IP 访问的连接数netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -rn查看 TCP 连接数netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'SYN_RECV表⽰正在等待处理的请求数;ESTABLISHED表⽰正常数据传输状态;TIME_WAIT表⽰处理完毕,等待超时结束的请求数。
一天一个shell命令linux文本内容操作系列-awk命令详解
⼀天⼀个shell命令linux⽂本内容操作系列-awk命令详解简介awk是⼀个强⼤的⽂本分析⼯具,相对于grep的查找,sed的编辑,awk在其对数据分析并⽣成报告时,显得尤为强⼤。
简单来说awk就是把⽂件逐⾏的读⼊,以空格为默认分隔符将每⾏切⽚,切开的部分再进⾏各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,⼀般指gawk,gawk 是 AWK 的 GNU 版本。
awk其名称得⾃于它的创始⼈ Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓⽒的⾸个字母。
实际上 AWK 的确拥有⾃⼰的语⾔: AWK 程序设计语⾔,三位创建者已将它正式定义为“样式扫描和处理语⾔”。
它允许您创建简短的程序,这些程序读取输⼊⽂件、为数据排序、处理数据、对输⼊执⾏计算以及⽣成报表,还有⽆数其他的功能。
使⽤⽅法awk '{pattern + action}' {filenames}尽管操作可能会很复杂,但语法总是这样,其中 pattern 表⽰ AWK 在数据中查找的内容,⽽ action 是在找到匹配内容时所执⾏的⼀系列命令。
花括号({})不需要在程序中始终出现,但它们⽤于根据特定的模式对⼀系列指令进⾏分组。
pattern就是要表⽰的正则表达式,⽤斜杠括起来。
awk语⾔的最基本功能是在⽂件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进⾏其他⽂本操作。
完整的awk脚本通常⽤来格式化⽂本⽂件中的信息。
通常,awk是以⽂件的⼀⾏为处理单位的。
awk每接收⽂件的⼀⾏,然后执⾏相应的命令,来处理⽂本。
调⽤awk有三种⽅式调⽤awk说明:awk被设计⽤于数据流,能够对列和⾏进⾏操作。
⽽sed更多的是匹配,进⾏替换和删除。
awk有很多内建的功能,⽐如数组,函数等。
灵活性是awk的最⼤优势。
awk的结构awk 'BEGIN{ print "start"}pattern { commands }END{ print "end"}'file为了偏于观看,我打了回车,实际上是⼀⾏⼀个awk脚本通常是3部分1. BEGIN语句块2. 能够使⽤模式匹配的通⽤语句块3. END语句块他们任何⼀部分都可以不出现在脚本中。
