Error[8]: Undefined offset: 145, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录 awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实 *** 案例5. 常用awk的内置变量6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法
awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 则表示所有域,$n表示第一个域,$NF表示第n个域,[表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明 -F:指定输入文件折分隔符。-v:赋值一个用户定义变量。-f:引入awk执行脚本。 4. 实 *** 案例

准备数据

]root@jiangnan awk# cp /etc/passwd ./[
]root@jiangnan awk# cat passwd ..
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[.
]root@jiangnan awk# [
搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
]root@jiangnan awk# awk -F: '/^root/{print }' passwd[
/bin/bash
]root@jiangnan awk# :

-F,指定分隔符为^。print,打印。$7,第7列(域)。
[在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
]root@jiangnan awk# awk -F: '/^root/{print ","}' passwd[
root,/bin/bash
]root@jiangnan awk# [

注意:只有匹配了pattern的行才会执行action。

将passwd文件中的用户id增加数值1并输出
]root@jiangnan awk# awk -v i=1 -F: '{print +i}' passwd1
2
3
4
..
[.
]root@jiangnan awk# [

-v:赋值一个用户定义变量

如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
]root@jiangnan awk# cat abc 
{print ,$NF,}[
]root@jiangnan awk# awk -F : -f abc passwd 0
root 1 /bin/bash
bin 2 /sbin/nologin
daemon 3 /sbin/nologin
adm 4 /sbin/nologin
lp .. /sbin/nologin
[.
]root@jiangnan awk# [

-f:引入awk执行脚本。

只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
]root@jiangnan awk# awk -F : 'BEGIN{print "user, shell"} {print ","} END{print "dahaige,/bin/zuishuai"}' passwd..
user, shell
root,/bin/bash
bin,/sbin/nologin
[.
ntp,/sbin/nologin
dahaige,/bin/zuishuai
]root@jiangnan awk# 变量

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量 [
说明FILENAME
awk浏览的文件名NR
已读的记录数NF
浏览记录的域的个数
统计passwd文件名,每行的行号,每行的列数。
]root@jiangnan awk# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd..
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
[.
filename:passwd, linenumber:24,columns:7
]root@jiangnan awk# [
查询sed.txt中空行所在的行号
]root@jiangnan awk# cat sed.txt 1
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy dog.

4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
]root@jiangnan awk# awk '/^$/{print NR}' sed.txt3
[
]root@jiangnan awk# [
输出passwd第3行的所有数据
]root@jiangnan awk# awk 'NR==3{print [}' passwd ]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# root@jiangnan awk[]
输出passwd第5行的第6个字段
# awk -F: 'NR==5{print }' passwd root@jiangnan awk[]
/var/spool/lpd
# root@jiangnan awk[]
输出第一个字段为root所在的行
# awk -F: '=="root"{print [}' passwd root@jiangnan awk]# 
root:x:0:0:root:/root:/bin/bash
:root@jiangnan awk[]

以上案例要注意需要指定切割符# head -2 /proc/meminfo | awk 'NR==1{a=}NR==2{b=;print (a-b)*100/a "%"}'

查看已使用的内存
95.6707root@jiangnan awk[]
# %
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print 1}END{print "bye ayitula"}' sed.txt 
6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的 *** 作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

1)BEGIN: 在开始处理数据流之前执行,可选项2)program: 如何处理数据流,必选项3)END: 处理完数据流后执行,可选项
2root@jiangnan awk34
hello ayitula
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.

] the quick green fox jumps over the lazy dog.
#  the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
bye ayitula
]root@jiangnan awk# awk 'BEGIN{print "hello world"}'[
]root@jiangnan awk# [
hello world
]root@jiangnan awk# awk 'END{print "hello world"}'[+++]

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

[+++]root@jiangnan awk[+++][+++]

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 146, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录 awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实 *** 案例5. 常用awk的内置变量6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法
awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 则表示所有域,$n表示第一个域,$NF表示第n个域,[表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明 -F:指定输入文件折分隔符。-v:赋值一个用户定义变量。-f:引入awk执行脚本。 4. 实 *** 案例

准备数据

]root@jiangnan awk# cp /etc/passwd ./[
]root@jiangnan awk# cat passwd ..
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[.
]root@jiangnan awk# [
搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
]root@jiangnan awk# awk -F: '/^root/{print }' passwd[
/bin/bash
]root@jiangnan awk# :

-F,指定分隔符为^。print,打印。$7,第7列(域)。
[在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
]root@jiangnan awk# awk -F: '/^root/{print ","}' passwd[
root,/bin/bash
]root@jiangnan awk# [

注意:只有匹配了pattern的行才会执行action。

将passwd文件中的用户id增加数值1并输出
]root@jiangnan awk# awk -v i=1 -F: '{print +i}' passwd1
2
3
4
..
[.
]root@jiangnan awk# [

-v:赋值一个用户定义变量

如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
]root@jiangnan awk# cat abc 
{print ,$NF,}[
]root@jiangnan awk# awk -F : -f abc passwd 0
root 1 /bin/bash
bin 2 /sbin/nologin
daemon 3 /sbin/nologin
adm 4 /sbin/nologin
lp .. /sbin/nologin
[.
]root@jiangnan awk# [

-f:引入awk执行脚本。

只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
]root@jiangnan awk# awk -F : 'BEGIN{print "user, shell"} {print ","} END{print "dahaige,/bin/zuishuai"}' passwd..
user, shell
root,/bin/bash
bin,/sbin/nologin
[.
ntp,/sbin/nologin
dahaige,/bin/zuishuai
]root@jiangnan awk# 变量

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量 [
说明FILENAME
awk浏览的文件名NR
已读的记录数NF
浏览记录的域的个数
统计passwd文件名,每行的行号,每行的列数。
]root@jiangnan awk# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd..
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
[.
filename:passwd, linenumber:24,columns:7
]root@jiangnan awk# [
查询sed.txt中空行所在的行号
]root@jiangnan awk# cat sed.txt 1
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy dog.

4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
]root@jiangnan awk# awk '/^$/{print NR}' sed.txt3
[
]root@jiangnan awk# [
输出passwd第3行的所有数据
]root@jiangnan awk# awk 'NR==3{print [}' passwd ]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# root@jiangnan awk[]
输出passwd第5行的第6个字段
# awk -F: 'NR==5{print }' passwd root@jiangnan awk[]
/var/spool/lpd
# root@jiangnan awk[]
输出第一个字段为root所在的行
# awk -F: '=="root"{print [}' passwd root@jiangnan awk]# 
root:x:0:0:root:/root:/bin/bash
:root@jiangnan awk[]

以上案例要注意需要指定切割符# head -2 /proc/meminfo | awk 'NR==1{a=}NR==2{b=;print (a-b)*100/a "%"}'

查看已使用的内存
95.6707root@jiangnan awk[]
# %
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print 1}END{print "bye ayitula"}' sed.txt 
6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的 *** 作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

1)BEGIN: 在开始处理数据流之前执行,可选项2)program: 如何处理数据流,必选项3)END: 处理完数据流后执行,可选项
2root@jiangnan awk34
hello ayitula
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.

] the quick green fox jumps over the lazy dog.
#  the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
bye ayitula
]root@jiangnan awk# awk 'BEGIN{print "hello world"}'[
]root@jiangnan awk# [
hello world
]root@jiangnan awk# awk 'END{print "hello world"}'

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

[+++]root@jiangnan awk[+++][+++]

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 147, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录 awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实 *** 案例5. 常用awk的内置变量6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法
awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 则表示所有域,$n表示第一个域,$NF表示第n个域,[表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明 -F:指定输入文件折分隔符。-v:赋值一个用户定义变量。-f:引入awk执行脚本。 4. 实 *** 案例

准备数据

]root@jiangnan awk# cp /etc/passwd ./[
]root@jiangnan awk# cat passwd ..
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[.
]root@jiangnan awk# [
搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
]root@jiangnan awk# awk -F: '/^root/{print }' passwd[
/bin/bash
]root@jiangnan awk# :

-F,指定分隔符为^。print,打印。$7,第7列(域)。
[在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
]root@jiangnan awk# awk -F: '/^root/{print ","}' passwd[
root,/bin/bash
]root@jiangnan awk# [

注意:只有匹配了pattern的行才会执行action。

将passwd文件中的用户id增加数值1并输出
]root@jiangnan awk# awk -v i=1 -F: '{print +i}' passwd1
2
3
4
..
[.
]root@jiangnan awk# [

-v:赋值一个用户定义变量

如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
]root@jiangnan awk# cat abc 
{print ,$NF,}[
]root@jiangnan awk# awk -F : -f abc passwd 0
root 1 /bin/bash
bin 2 /sbin/nologin
daemon 3 /sbin/nologin
adm 4 /sbin/nologin
lp .. /sbin/nologin
[.
]root@jiangnan awk# [

-f:引入awk执行脚本。

只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
]root@jiangnan awk# awk -F : 'BEGIN{print "user, shell"} {print ","} END{print "dahaige,/bin/zuishuai"}' passwd..
user, shell
root,/bin/bash
bin,/sbin/nologin
[.
ntp,/sbin/nologin
dahaige,/bin/zuishuai
]root@jiangnan awk# 变量

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量 [
说明FILENAME
awk浏览的文件名NR
已读的记录数NF
浏览记录的域的个数
统计passwd文件名,每行的行号,每行的列数。
]root@jiangnan awk# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd..
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
[.
filename:passwd, linenumber:24,columns:7
]root@jiangnan awk# [
查询sed.txt中空行所在的行号
]root@jiangnan awk# cat sed.txt 1
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy dog.

4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
]root@jiangnan awk# awk '/^$/{print NR}' sed.txt3
[
]root@jiangnan awk# [
输出passwd第3行的所有数据
]root@jiangnan awk# awk 'NR==3{print [}' passwd ]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# root@jiangnan awk[]
输出passwd第5行的第6个字段
# awk -F: 'NR==5{print }' passwd root@jiangnan awk[]
/var/spool/lpd
# root@jiangnan awk[]
输出第一个字段为root所在的行
# awk -F: '=="root"{print [}' passwd root@jiangnan awk]# 
root:x:0:0:root:/root:/bin/bash
:root@jiangnan awk[]

以上案例要注意需要指定切割符# head -2 /proc/meminfo | awk 'NR==1{a=}NR==2{b=;print (a-b)*100/a "%"}'

查看已使用的内存
95.6707root@jiangnan awk[]
# %
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print 1}END{print "bye ayitula"}' sed.txt 
6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的 *** 作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

1)BEGIN: 在开始处理数据流之前执行,可选项2)program: 如何处理数据流,必选项3)END: 处理完数据流后执行,可选项
2root@jiangnan awk34
hello ayitula
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.

] the quick green fox jumps over the lazy dog.
#  the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
bye ayitula
]root@jiangnan awk# awk 'BEGIN{print "hello world"}'[
]root@jiangnan awk# [
hello world
]root@jiangnan awk# awk 'END{print "hello world"}'

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

root@jiangnan awk[+++][+++]

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 148, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录 awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实 *** 案例5. 常用awk的内置变量6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法
awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 则表示所有域,$n表示第一个域,$NF表示第n个域,[表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明 -F:指定输入文件折分隔符。-v:赋值一个用户定义变量。-f:引入awk执行脚本。 4. 实 *** 案例

准备数据

]root@jiangnan awk# cp /etc/passwd ./[
]root@jiangnan awk# cat passwd ..
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[.
]root@jiangnan awk# [
搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
]root@jiangnan awk# awk -F: '/^root/{print }' passwd[
/bin/bash
]root@jiangnan awk# :

-F,指定分隔符为^。print,打印。$7,第7列(域)。
[在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
]root@jiangnan awk# awk -F: '/^root/{print ","}' passwd[
root,/bin/bash
]root@jiangnan awk# [

注意:只有匹配了pattern的行才会执行action。

将passwd文件中的用户id增加数值1并输出
]root@jiangnan awk# awk -v i=1 -F: '{print +i}' passwd1
2
3
4
..
[.
]root@jiangnan awk# [

-v:赋值一个用户定义变量

如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
]root@jiangnan awk# cat abc 
{print ,$NF,}[
]root@jiangnan awk# awk -F : -f abc passwd 0
root 1 /bin/bash
bin 2 /sbin/nologin
daemon 3 /sbin/nologin
adm 4 /sbin/nologin
lp .. /sbin/nologin
[.
]root@jiangnan awk# [

-f:引入awk执行脚本。

只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
]root@jiangnan awk# awk -F : 'BEGIN{print "user, shell"} {print ","} END{print "dahaige,/bin/zuishuai"}' passwd..
user, shell
root,/bin/bash
bin,/sbin/nologin
[.
ntp,/sbin/nologin
dahaige,/bin/zuishuai
]root@jiangnan awk# 变量

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量 [
说明FILENAME
awk浏览的文件名NR
已读的记录数NF
浏览记录的域的个数
统计passwd文件名,每行的行号,每行的列数。
]root@jiangnan awk# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd..
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
[.
filename:passwd, linenumber:24,columns:7
]root@jiangnan awk# [
查询sed.txt中空行所在的行号
]root@jiangnan awk# cat sed.txt 1
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy dog.

4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
]root@jiangnan awk# awk '/^$/{print NR}' sed.txt3
[
]root@jiangnan awk# [
输出passwd第3行的所有数据
]root@jiangnan awk# awk 'NR==3{print [}' passwd ]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# root@jiangnan awk[]
输出passwd第5行的第6个字段
# awk -F: 'NR==5{print }' passwd root@jiangnan awk[]
/var/spool/lpd
# root@jiangnan awk[]
输出第一个字段为root所在的行
# awk -F: '=="root"{print [}' passwd root@jiangnan awk]# 
root:x:0:0:root:/root:/bin/bash
:root@jiangnan awk[]

以上案例要注意需要指定切割符# head -2 /proc/meminfo | awk 'NR==1{a=}NR==2{b=;print (a-b)*100/a "%"}'

查看已使用的内存
95.6707root@jiangnan awk[]
# %
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print 1}END{print "bye ayitula"}' sed.txt 
6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的 *** 作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

1)BEGIN: 在开始处理数据流之前执行,可选项2)program: 如何处理数据流,必选项3)END: 处理完数据流后执行,可选项
2root@jiangnan awk34
hello ayitula
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.

] the quick green fox jumps over the lazy dog.
#  the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
bye ayitula
]root@jiangnan awk# awk 'BEGIN{print "hello world"}'[
]root@jiangnan awk# [
hello world
]root@jiangnan awk# awk 'END{print "hello world"}'

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

root@jiangnan awk[+++]

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
【Linux篇】awk命令详解_软件运维_内存溢出

【Linux篇】awk命令详解

【Linux篇】awk命令详解,第1张

文章目录 awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实 *** 案例5. 常用awk的内置变量6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法
awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 则表示所有域,$n表示第一个域,$NF表示第n个域,[表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明 -F:指定输入文件折分隔符。-v:赋值一个用户定义变量。-f:引入awk执行脚本。 4. 实 *** 案例

准备数据

]root@jiangnan awk# cp /etc/passwd ./[
]root@jiangnan awk# cat passwd ..
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[.
]root@jiangnan awk# [
搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
]root@jiangnan awk# awk -F: '/^root/{print }' passwd[
/bin/bash
]root@jiangnan awk# :

-F,指定分隔符为^。print,打印。$7,第7列(域)。
[在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
]root@jiangnan awk# awk -F: '/^root/{print ","}' passwd[
root,/bin/bash
]root@jiangnan awk# [

注意:只有匹配了pattern的行才会执行action。

将passwd文件中的用户id增加数值1并输出
]root@jiangnan awk# awk -v i=1 -F: '{print +i}' passwd1
2
3
4
..
[.
]root@jiangnan awk# [

-v:赋值一个用户定义变量

如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
]root@jiangnan awk# cat abc 
{print ,$NF,}[
]root@jiangnan awk# awk -F : -f abc passwd 0
root 1 /bin/bash
bin 2 /sbin/nologin
daemon 3 /sbin/nologin
adm 4 /sbin/nologin
lp .. /sbin/nologin
[.
]root@jiangnan awk# [

-f:引入awk执行脚本。

只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
]root@jiangnan awk# awk -F : 'BEGIN{print "user, shell"} {print ","} END{print "dahaige,/bin/zuishuai"}' passwd..
user, shell
root,/bin/bash
bin,/sbin/nologin
[.
ntp,/sbin/nologin
dahaige,/bin/zuishuai
]root@jiangnan awk# 变量

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量 [
说明FILENAME
awk浏览的文件名NR
已读的记录数NF
浏览记录的域的个数
统计passwd文件名,每行的行号,每行的列数。
]root@jiangnan awk# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd..
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
[.
filename:passwd, linenumber:24,columns:7
]root@jiangnan awk# [
查询sed.txt中空行所在的行号
]root@jiangnan awk# cat sed.txt 1
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy dog.

4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
]root@jiangnan awk# awk '/^$/{print NR}' sed.txt3
[
]root@jiangnan awk# [
输出passwd第3行的所有数据
]root@jiangnan awk# awk 'NR==3{print [}' passwd ]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# root@jiangnan awk[]
输出passwd第5行的第6个字段
# awk -F: 'NR==5{print }' passwd root@jiangnan awk[]
/var/spool/lpd
# root@jiangnan awk[]
输出第一个字段为root所在的行
# awk -F: '=="root"{print [}' passwd root@jiangnan awk]# 
root:x:0:0:root:/root:/bin/bash
:root@jiangnan awk[]

以上案例要注意需要指定切割符# head -2 /proc/meminfo | awk 'NR==1{a=}NR==2{b=;print (a-b)*100/a "%"}'

查看已使用的内存
95.6707root@jiangnan awk[]
# %
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print 1}END{print "bye ayitula"}' sed.txt 
6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的 *** 作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

1)BEGIN: 在开始处理数据流之前执行,可选项2)program: 如何处理数据流,必选项3)END: 处理完数据流后执行,可选项
2root@jiangnan awk34
hello ayitula
5 the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.

] the quick green fox jumps over the lazy dog.
#  the quick green fox jumps over the lazy dog.
[ the quick green fox jumps over the lazy dog.
bye ayitula
]root@jiangnan awk# awk 'BEGIN{print "hello world"}'[
]root@jiangnan awk# [
hello world
]root@jiangnan awk# awk 'END{print "hello world"}'

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

root@jiangnan awk

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/926262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存