awk命令使用实例,awk命令行

http://www.itjxue.com  2023-01-05 14:15  来源:未知  点击次数: 

awk 命令

AWK

command 读前处理 行处理 读后处理

1、读前处理: BEGIN{awk_cmd1;awk_cmd2}

2、行处理:定址命令

定址方法:正则、变量、比较和关系运算

正则需要用//包围起来

awk -F: '/root/{print}' gad

awk -F: '$1~/root/{print}' gad 第一列匹配

awk -F: '$1~/root/{print}' gad 第一列匹配,锁定字符串匹配

awk -F: '$1!~/root/{print}' gad

. 除了换行符以外的任意单个字符

[] 字符组内的任一字符

[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)

[ ] 非字符组内的字符开头的行

3、读后处理END{awk_cmd1;awk_cmd2}

awk -F "" '{for(i=1;i=NF;i++) print $i}' gad.txt 逐字换行

NF代表每行的元素个数

NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)

FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)

1 1 AAAA

2 2 aaaa

3 3 a

4 1 bb

5 2 bbbbbbbb

赋值 = ++ -- += 。。。

awk 'BEGIN{a=1;print a++;print a}' 先执行命令然后a+1

|| 逻辑或 逻辑与 ! 取反

匹配正则或不匹配,正则需要用/正则/ 包围住

~ !~

关系比较字符串时要把字符串用双引号引起来

= = != ==

转义序列

\ \自身 $ 转义$ \t 制表符 \b 退格符 \r 回车符 \n 换行符 \c 取消换行

-v可以借用此方式从shell变量中引入

a=root

awk -v var=$a -F':' '$1==var{print $1}' passwd

a= whoami ; awk -v var=$a -F':' '$1==var{print $3,$6}' /etc/passwd

FS 定义字段分隔符,默认为一个空格

OFS 输出的字段分隔符,默认为一个空格

root-0-root

bin-1-bin

root@@0##root

bin@@1##bin

RS 记录分隔符,默认为一个换行符

head -2 /etc/passwd | awk 'BEGIN{ RS=":"}{print}' 把:号换成了换行符

ORS 输出的记录分隔符,默认为一个换行符

head -2 /etc/passwd | awk 'BEGIN{ ORS="-"}{print}' 把换行符换成了 - 号

FILENAME 文件名

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 输出系统环境变量

root

AWK的使用

AWK

语法: awk -F/f/v/ + ‘pattern’ +文件全路径

或者:标准输出|awk -F/f/v/ + ‘pattern’

参数含义: -F 指定域的分隔符,如默冒号“:”

写法有三个

1.awk -F: ‘pattern’ 文件全路径

2.awk -F “:” ‘pattern’ 文件全路径

3.awk -F’[:,\t]’ ‘pattern’ 文件全路径 #这里用单引号+中括号,表示分隔字符的集合,集合中的每一个符号都会被用作分隔符去分隔当前行

-f 指定从awk文件中执行awk指令

awk是一门语言,它有自己的语法,如果在考虑复用已经awk语句比较复杂的情况下,建议将其写入文件。文件尾建议定为.awk的后缀。

在awk脚本文件的第一行,写入命令解释器的位置,所以这里要写入awk解释器的路劲

终端执行 which awk 命令得到位置

一般为 /usr/bin/awk

于是,文件开头写为 #!/usr/bin/awk -f

然后就在下一行写你的awk语句,保存退出。

这么执行 awk -f script.awk file

-v 自定义变量

awk -v var="name" 'BEGIN{print var}'

感觉没什么用,如果要定义变量,不如直接定义在BEGIN里面

awk -F: ‘BEGIN{var=”name”}{print var}END{print “balabalaba”}’ file

awk 可以使用条件判断、for、do-while等控制语句

语法都和C语言近似,如有需要请看这里

awk 的print 语句支持格式控制,和C类似 ,

语法为: print “balabal %-6s balabala %d\n”,name,age

%s,控制字符串类型输出

%d,控制整形类型输出

%f,控制浮点型

%%,转义为%号

awk存在数组数据类型

数组也和变量一样,初始化语句也同时是声明语句,arr[110]=”aaa”,arr[nihao] = 123,

可以看出来,awk的数组其实并不是正真意义上的数组,更像一个字典

awk内置变量

(一)FS:字段分隔符(field separator) #设置域分隔字符,是用某个字符的替换之前的内容

(二)OFS:输出的字段分隔符(output field separator)#替换FS的内容

(三)RS:记录分隔符(record separator) #设置换行符,使某个字符后面的内容换到下一行

(四)ORS:输出的记录分隔符(output record separator)#将换行符替换成ORS的内容

(五)NF:字段数量(number of field)

这里 (NF-1)可以取到倒数第二个域的值

(六)NR:记录编号(number of record)#行号

(七)FNR:按文件计算“记录编号”(file (1)FNR 表示当前行在不同输入流中处于第几行 #用同一个AWk处理多个文件时,正确显示改行在文件中的行号

(八)FILENAME:文件名

(九)ARGC:参数个数(arguments account)

(十)ARGV:参数列表数组(arguments variable)

linux awk命令怎么用?

linux awk命令怎么用? awk:用于一行中分成数个“栏位”来处理。适合处理 小型资料。

执行模式:awk '条件型别1{动作1} 条件型别2{动作2} ...' filename

# last | awk '{print $1 "\t" $3}' == 检视登入者的资料,只显示登入名和ip地址,并以[tab]隔开

awk 的内建变数

变数名称 代表的含义

NF 每一行($0)拥有的栏位总数

NR 当前 awk 所处理的是 “第几行” 资料

FS 当前分隔符,预设空格键

awk 的逻辑运算子

运算单元 代表含义

大于

小于

= 大于或等于

= 小于或等于

== 等于

!= 不等于

范例:

cat /etc/passwd | awk '{FS=":"} $3 10 {print $1 "\t" $3}' == 档案/etc/passwd是以":"分隔的,检视第三栏小于10的资料,并且只显示帐号与第三栏

以上是我对awk的总结,希望对你有帮助,是我写的哦,不是复制的。

linux 怎么用awk命令 取出一段文字

awk '/DIMENSION NAME="CCCCCC" SRC_TYPE="INTERNAL"/,/DIMENSIONS/ {print $0}' filename

Linux awk命令问题

head -n 3 /etc/passwd|awk -F ':' '$1="root"' 这里$1="root",表示将第1列的值赋值为root,因此上述命令表示:将/etc/passwd中前3行按照‘:’分隔后第一列以root显示,并列印其他列。

awk -F ':' '$3=="0"' /etc/passwd

这里$3=="0",表示将第三列与"0”进行匹配,以什么方式匹配呢?以‘:’分隔后的第三列进行匹配并列印。这里是匹配列印,所以列印的是匹配的那一行(被:分隔后),而不是显示分隔后的列。

所以,区别在于一个是分隔后赋值列印分隔后列的值,一个是按照指定分隔方式进行匹配找到匹配的行,列印的是匹配的那一行。

linux的awk命令问题

一行里 第一个元素和第三个元素

linux下 awk命令问题

1、其实这样基本满足要求。但是确实不够严谨。试试是否可以。

ps -le | grep sshd | awk '{print $4}'

2、对ps 命令用的最多的是ps -ef 对el 我不是很了解具体输出什么。当然,是不是你压根就没有这个sshd服务启动。这些都先验证一下。一步一步的输出,看看问题出现在管道的哪一个环节。

3、或者这个 $14==sshd 栏位你指定错了。 awk $指定的变数是从1 开始的。$0是整个行。这个不要忘记了哦。

如果上述1第一种情况可以输出,第二种2不可以话,可能就验证了我的假设。你栏位拆解出现错误。把$14 这个栏位好好看看。

linux awk命令基础 怎么在终端写

awk一般用于文字处理,通常用作资料提取。终端书写demo

awk '{print }' info.txt

以上是输出文字档案info.txt的所有内容,请使用实际档案进行替换info.txt

ps -ef|grep process_name | awk -F"" '{print $2}'

以上是查询process_name程序的ID资讯,把查询资讯作为引数传给awk进行过滤,请使用实际程序名替换process_name。

awk命令在 linux和aix下的区别

三种呼叫awk的命令方式:

1.命令列方式:awk [-F field-separator] 'mands' input-file(s)

-F选项可选:awk -F: 'mands' input-file

2.将所有的awk命令插入一个档案,并是awk程式可执行,然后用awk命令直译器作为指令码的首行,

以便通过键入指令码名称来呼叫它。

3.将所有的awk命令插入一个单独档案,然后呼叫:

awk -f awk-script-file input-files(s)

-f:指明在档案awk-script-file中的awk指令码

input-file(s):使用awk进行浏览的档名。

awk指令码

在命令中呼叫awk时,awk指令码由各种操作和模式组成。

-F,awk每次读一条记录或一行,并使用指定的分隔符分分隔指定域;

所没分隔符,则使用空格。

任何awk语句都由模式和动作组成

模式,决定动作语句何时触发及触发事件,若忽略模式部分,动作将时刻保持执行状态。

模式,可是任何条件语句,或符合语句,或正则表示式。

BEGIN:设定计数,列印头,在任何文字浏览动作之前;

END:用来在awk完成档案浏览动作后列印输出档案总数和结尾状态标志。

动作,在{}内指定;大多用来列印;里面可包含:if,looping,回圈推出结构;

若不指明采取动作,awk将列印所有浏览出来的记录。

如何在Linux中使用awk命令

awk例项

1、cat /etc/passwd|awk -F: '{print $1}'

2、linux的awk一般都是gawk,/bin/awk - gawk

3、awk ‘/abc/’ file.txt 显示档案中包含abc行。类似grep abc a.txt

4、awk ‘{print NR,NF,$1,$NF,}’ file.txt按空格分隔列,显示当前记录号、域数和每一行的第一列和最后一列。

-F引数可以设定分割引数,例如按:分割

awk -F: ‘{print $1}’ /etc/passwd

或者cat file|awk -F “|” ‘{print $1}’

5、awk程式语言

cat v.txt|awk ‘{print length($1)}’

6、awk中使用NR和FNR,一般在awk处理多个档案时,NR==FNR才有意义

NF 当前记录中的栏位数。

NR 当前记录数。

FNR同NR,但相对于当前档案。

awk ‘{print NR,FNR}’ test.txt test2.txt

awk ‘{if(NR==FNR){a[FNR]=$1;}else{print $1,a[FNR]}}’ b.txt a.txt

7、列印奇数行与偶数行

awk ‘NR%2’ test.txt

awk ‘!(NR%2)’ test.txt

8、杀死tomcat的s.sh指令码

#!/bin/sh

ps -ef| grep tomcat |grep -v grep | awk ‘{print $2}’ |xargs kill -9

9、列印前7列

cat a.txt|awk ‘{NF=7}1’ b.txt

tail -f aess.log|awk ‘NF=7′ OFS=’\t’ b.txt

cut -d”,” -f3-6 urfile

LINUX系统怎么使用awk命令实现下述操作

cat file|awk -F"name=" '{print $2}'|awk -F\" '{print $1}'

试试看,第二个”的转义,我没测试,可以自己调下

如何在Linux中使用awk命令

awk:用于一行中分成数个“字段”来处理。适合处理

小型数据。

运行模式:awk

'条件类型1{动作1}

条件类型2{动作2}

...'

filename

#

last

|

awk

'{print

$1

"\t"

$3}'

==

查看登录者的数据,只显示登录名和ip地址,并以[tab]隔开

awk

的内置变量

变量名称

代表的含义

NF

每一行($0)拥有的字段总数

NR

当前

awk

所处理的是

“第几行”

数据

FS

当前分隔符,默认空格键

awk

的逻辑运算符

运算单元

代表含义

大于

小于

=

大于或等于

=

小于或等于

==

等于

!=

不等于

范例:

cat

/etc/passwd

|

awk

'{FS=":"}

$3

10

{print

$1

"\t"

$3}'

==

文件/etc/passwd是以":"分隔的,查看第三栏小于10的数据,并且只显示帐号与第三栏

以上是我对awk的总结,希望对你有帮助,是我写的哦,不是复制的。

Linux入门系列——awk命令详解

awk是一个强大的文本分析工具,与grep、sed相比,awk在对数据分析并生成报告时,显得有很大的优势。

awk有三个不同的版本:awk、nawk和gawk,在没有做特殊说时的时候默认的就是gawk,gawk是awk的GNU版本。

其中command是真正的awk命令,-F表示域的分隔符,是个可选项。Filename是等待处理的文件

将所有的awk命令写入到一个文件,并使用该文件有X权限,然后awk命令解释器作为脚本的首行,也就是说可以把脚本最开始的 #!/bin/bash 换成 #!/bin/awk

最后直接执行这个脚本文件就行了。

-f 指定要加载的awk脚本,是一个文件。Filename是等待处理的文件

awk的工作流程是这样的:读入一行后(最后面带有” ”的),就按-F指定的分隔符来将该行划分成N个区域,$0表示所有的区域,$1表示第一个域,$2表示第二个域,依此类推,$n表示第n个域。

总结:awk先执行BEGIN内的命令,然后再读入文件中的行,接着就是按照指定的分隔符将该行分成N个区域,然后再来执行模式所对应的动作action。然后,再来读入第二行。。再重复执行action,直到所有的行都处理完成。最后再执行END中的命令。

注意:' // '之间是支持正则表达式的,如果此处只有pattern,而没有action,那么awk默认会把匹配到的行打印出来。

awk中的print还可以使用C语言中的printf来替代。在输出格式比较复杂的时候使用printf函数会比print函数要更直观一些,如下:

还可以使用-v key=value来自定义变量。如下:

awk中的条件语句是从C中借鉴过来的

语法:if (condition) {then-body} else {else-body}

例如使用awk来统计某个目录下的普通文件的大小,不包括子目录的,并过滤掉目录。

循环语句也和C中的一样,支持while、do/while、for、continue、break等关键字。

break和continue常用于循环中;

在awk中,数组的下标可以是数字或字母。一般awk中的数组的作用是从记录中收集信息,用于计算总和、统计单词等。

在awk中要删除一个元素的时候使用 delete array[index]

更多请参见awk官方文档[]

Linux三剑客awk命令篇二:命令操作符

Linux三剑客awk命令篇二:命令操作符

关于awk的原理等基本知识请参考上篇:

Linux三剑客awk命令篇一:原理及基本命令

补充

1、语法格式:

(1) Awk完整语法

awk 'BEGIN{commands} pattern{commands}END{commands} ' file

BEGIN{commands}:处理数据前执行的命令。

END{commands}:处理完数据后执行的命令。

这两个命令可以省略。见(2)

(2) Awk基本语法

awk -F '分割符' '/模式/{动作} ' file

这里的 '/模式/{动作} ' 类似于sed的命令格式。

模式:

(1) 正则表达式(注意格式: /正则表达式/ )

(2) 条件表达式(例如: 等等)

总结:

这里的模式通俗来讲是 用来找谁, 而动作表示是 干啥。

2、 awk的命令操作符

(1) 正则表达式与bash一致

(2) + - * / % ++ --

(3) || !

(4) = = != == ~ !~

~:表示匹配后面的模式,用于字段,见 案例1 。

其余的都比较常见就不举例了。

3、案例

案例1:

~使用案例

awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd

解释:

模式:\...\

\ \表示定界符,只匹配3个字符。

$3 ~:表示$3这个字段必须符合后面模式(\...\)的要求。

见如下输出结果,$3都是3个字符。

案例2:

% || ==使用案例

seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'

输出结果的要求:

整除7或者以99开头

案例3:

++使用

awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd

简单解释:

BEGIN{num=0}:定义一个变量num

{num++}:这里没有模式,只有动作。

即每匹配到文件/etc/passwd的一行就执行num++

END{print num}:文件遍历结束,打印num的值,即文件的行数。

这里我们使用wc -l验证也是没问题的。

cat /etc/passwd | wc -l

上面3个案例简单的使用了awk的命令操作符。

虽然只是用到了几个简单的,但是其他同理,大家可以执行操作。

下一篇:

Linux三剑客awk命令篇二之内部变量

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

(责任编辑:IT教学网)

更多

推荐MYSQL文章