导航:首页 > 程序命令 > awk命令用法

awk命令用法

发布时间:2022-07-26 18:31:20

‘壹’ awk的用法

我们都知道awk的模式是pattern{action},就是当pattern成立时进行action的动作,乍一看,上面咋不符合这个模式呢?其实是省略啦!awk有一些默认的省略规则,省略action部分时表示默认为“{print $0}”,也就是打印整行内容;pattern部分为“/^-/”,是一个正则表达式,其实也是省略的写法啦,完整的写法为“$0 ~ /^-/”,所以扩充完应该为“awk '$0 ~ /^-/ {print $0}”,意思就是“打印第一个字符为-的行”,那么整行代码的意思就是“统计目录/userhome/mumsg/PRL/下的常规文件数目”。

‘贰’ linux awk命令怎么用

awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者联合开发的,用于Linux/Unix中处理数据和产生报告。awk命令功能十分强大,可根据需要抓取、截取指定的列或行。
首先在/mnt目录下创建示例文本文件f1,其内容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然后,使用awk对f1文件内容进行处理,举例如下。
①awk -F " " '{print $2,$3}' f1:截取显示文档的第二列和第三列,-F指定分隔符为空格,$表示显示第几列。其中print表示要做输出信息的动作,$2和$3表示要输出的列号,awk要求将print已经输出列等内容放在“'{}'”之间。
②awk -F " " '($1>3){print $2,$3}' f1:选取第一列的值大于3的行,显示其第二列和第三列,在“()”中指定筛选条件。
③awk 'NR==4 || NR==3' f1:显示第三行和第四行,NR表示行号。
④awk '/data/ {print $2}' f1:抓取包含指定字符的行,再对列进行截取。此例中,awk先按照“data”字符串对文件f1中的行筛选,找出包含“data”的行以后,再按照默认的空格作为分隔符对行的内容做切割,仅打印出第二列的内容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字符的行。其中“~”表示是否匹配指定的“data”,如果第二列的内容包含“data”就打印出整行内容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字符的行。其中“!~”表示是否不匹配指定的“data”,如果第二列的内容不包含“data”就打印出整行内容。

‘叁’ awk命令详解是什么

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

运算与判断:

作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。

作为对运算功能的一种扩展,awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。

作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外。awk 中允许进行多种测试,如常用的==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。

作为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&;(与)、||(或)和括号()进行多重判断,这大大增强了awk的功能。本文的附录中列出了awk所允许的运算、判断以及操作符的优先级。

‘肆’ Linux中sed命令同awk命令有什么区别呢,具体该如何使用呢

sed 多用来编辑修改
awk 多用来打印
sed grep awk 俗称三剑客
使用上sed 和 awk扩展下来,内容可多了,甚至awk可以被当作一种脚本工具,单独出书,sed简单的用法增删改查都是可以直接网络到的,awk的打印也是。
例如 sed中
s 替换
sed 's/zhangsan/lisi/' yourfile 就是将zhangsan替换为lisi ,打印不执行
加上i后才真正执行 sed -i 's/zhangsan/lisi/' yourfile
d 删除
sed '/zhangsan/d' yourfile
sed -i '/zhangsan/d' yourfile
a 追加
sed -i '/zhangsan/alisi' yourfile
i 前插

sed -i '/zhangsan/ilisi' yourfile
p 打印
sed -n '/zhangsan/p' yourfile
因为它本身也会打印一般,所以加 -n 不默认打印

awk
-F 指定分隔符
awk -F ':' '/^root/{print $7}' /etc/passwd
打印以 root开头所在行,以“:”为分隔符,打印第七列
其效果就是打印了root的shell
纯手打,望采纳,谢谢,遇到具体问题仍可继续交流

‘伍’ 关于awk用法

在正文部分定义的变量,END部分也可以调用的。既然是awk变量,在awk作用域中的任何地方都可以使用。你在END部分注释掉asort,直接打印变量 i 和 code[i] 看看就知道了。

manawk,看看asort函数的说明:

asort(s[,d])
gwith1

也就是说,数组下标会变掉。这是asort导致的。

用asort的时候使用第二个参数就可以了:

,thensisfirstplicatedintod,andthendissorted,.

这样就会先将数组s拷贝到数组d中,再对d按值排序,这样原数组s的下标就不会受到影响。

下面是我想到的方法,也许不是最好的:

#!/bin/awk-f
BEGIN{
print"Code sum scale flow flowscale ";
}
{
code[$9]++;
}
END{
n=asort(code,new);
for(i=1;i<=n;i++)
{
for(jincode)
{
if(code[j]==new[i])
{
printf("%d %d ",j,code[j]);
break;
}
}
}
}

按$9字段出现的次数由小到大排序。

输出的时候,第一列为原$9数据,第二列为出现次数。这是我对你原代码的理解。

‘陆’ 如何使用awk命令,打印除第一个域之外的其它

[root@iZ259r7h4pfZ ~]# cat 1
1 a A
2 b B
3 c C
[root@iZ259r7h4pfZ ~]# cat 1 |awk -F " " '{for(i=2;i<=NF;i++){ printf("%s ",$i);} printf("\n")}'
a A
b B
c C

‘柒’ linux shell中awk的用法

所有的编程书籍都是通过一个“Hello world!”简单程序入门,作为借鉴,本文也采用此方法带大家入门。现在,在当前目录下建立一个文本文件hello.txt,内容如下:
Hello world!
在命令行中输入以下命令:
$ awk '{ print }' hello.txt
执行后hello.txt文件的内容显示在屏幕上。编写并且执行awk程序的方法很简单,如上所示,花括号内的是程序代码,后面的hello.txt为指定的输入文件。awk是一种行处理程序,执行awk时,它依次对输入文件中的每一行执行花括号中的代码,如上面的例子,就是对hello.txt中的每一行执行print命令。所有输出都发送到stdout,最后在屏幕上显示的结果为“Hello world!”。
上面的例子是将脚本作为命令行自变量传递给awk,我们也可以把脚本写入一个外部文件,然后通过-f选项向awk传递这个脚本文件。例如编写脚本文件hello.ask如下:
{ print }
然后通过如下方式执行:
$ awk -f hello.awk hello.txt
这种编写独立脚本文件的方式应用在多行、比较复杂的程序上,非常合适,而且,在后面你还将看到,这种方式还可以让你非常方便地使用附加awk功能。

‘捌’ awk的使用 第八部分 awk如何读取命令行的参数

}’ $* 执行结果如下: [root@myfreelinux pub]# bash analyse.awk first-arg second-argawkfirst-argsecond-arg解释说明:ARGC,ARGV[ ]是awk的内建变量。 ARGC :是一整数,代表命令行上除了选项-v, -f 及其对应的参数之外所有参数的个数。 ARGV[ ] 是一字符串数组,ARGV[0],ARGV[1],。。。ARGV[ARGC-1]分别代表命令行上相对应的参数。 比如在这里执行的命令[root@myfreelinux pub]# bash analyse.awk first-arg second-arg,ARGC的值是3,ARGV[0]是awk,ARGV[1]的值为first-arg, ARGV[2]的值是second-arg。 再比如#awk -vx=21-f program fir-data sec-data和#awk ‘{ print $1 ,$2 }’fir-data sec-data 这两条ARGC 值都是3,ARGV[0]是awk,ARGV[1]是fir-data,ARGV[2]是sec-data,命令行上的-f program, -vx=21″,程序部分’{ print $1, $2}’ 都不会被列入ARGC和ARGV[ ]中。 awk 利用ARGC 来判断要打开的数据文件的个数,但是用户可以强行更改ARGC的值;比如将ARGC的值被用户设置为1,那么awk将被蒙骗,误以为命令行上没有数据文件文件, 所以不会以ARGV[1],ARGV[2]等作为文件名来打开文件并读取数据;但是在程序中可以使用ARGV[1],ARGV[2]等变量来取得命令行上数据文件的数据。 现在有一个awk程序内容如下: [root@myfreelinux pub]# cat test1.awk #!/bin/awk -fBEGIN{for(i=0;i<ARGC;i++) print ARGV[i];}执行以上程序的结果如下: [root@myfreelinux pub]# awk -f test1.awk arrive.dat today_result1awkarrive.dattoday_result1 加入将test1.awk的内容更改成test2.awk的内容如下: [root@myfreelinux pub]# cat test2.awk #!/bin/awk -fBEGIN{number=ARGC;#用number 记住实际的参数个数 ARGC=2;#设置ARGC=2,awk将以为只有一个资料文件 for(i=0;i<ARGC;i++) print ARGV[i];}执行并查看运行结果: [root@myfreelinux pub]# awk -f test2.awk arrive.dat today_result1 today_result2awkarrive.dat这个时候会发现,虽然同样ARGC=3,但是人为的设置ARGC=2,后,awk在执行的时候,只认为有一个参数arrive.dat。 将test2.awk修改成以下内容: [root@myfreelinux pub]# cat test3.awk #!/bin/awk -fBEGIN{number=ARGC;ARGC=2;for(i=0;i<ARGC;i++) print ARGV[i]; for(i=ARGC;i<number;i++) print ARGV[i];}运行并查看运行结果如下: 显然,通过修改ARGC可以修改awk能够识别的参数的个数,但是实际存在的ARGV的内容,仍然可以访问的。

‘玖’ awk的几个常用高级用法

1、同时指定多个分割符
这时应该把分隔符写成放到方括号中,如$awk -F'[ :/t]' '{print $1,$3}' test

此时指定了空格,:号,tab三个作为分隔符

2、awk的key的变态用法
awk '{a[$1,"/t", $2] += $4} END {for (uin in a) printf("%s/t%d/n", uin, a[uin]) }' test
用$1"/t"$2组成一维数组的key,这样可以用这种方式来处理很多复杂的二维数据逻辑

3、awk 的范围模板
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。

如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。

4、awk的重定向
awk 可使用shell的重定向符进行重定向输出,如:$ awk '$1 = 100 {print $1 > "output_file" }' test。上式表示如果第一个域的值等于100,则把它输出到output_file中。也可以用>>来重定向输出,但不清空文件,只做追加操作。

这样可以利用重定向,可以把不同的结果集写入到不同的文件里
比如,我经常要跑出vip1,2,3,4,5,6的6份文件,那么就可以写一个脚本,一次性都跑出来了

5、 awk -F"|" 'NR == FNR { a[$1] = $2 } NR > FNR { if (a[$1]!=""){ a[$1] = $2 - a[$1]; if(a[$1] > 0 && $2 == 2) print $0;} }' test test1

‘拾’ Unix下,awk用法

awk '{print $0}' filename

参考这句话。print $0是所有列 你可以将$0替换成,你需要打印的列
例如awk '{print $2}' "123 456 789"
就只会打印456
要用awk就要先了解awk的原理。知道原理了再去用会很方便的。祝好~

阅读全文

与awk命令用法相关的资料

热点内容
pythonoa项目 浏览:307
android杜比音效 浏览:341
杀手47为什么连接不了服务器 浏览:108
静态路径命令 浏览:533
一直编译不过怎么办 浏览:829
汽车串联并联算法 浏览:458
助眠解压的声音音频小哥哥 浏览:277
pythoncmd换行 浏览:376
linux取消行号 浏览:355
安卓原生系统官网是什么 浏览:444
底部主图源码 浏览:878
服务器崩了有什么提示 浏览:780
远程海康服务器用什么浏览器 浏览:232
解压报纸图片 浏览:956
python微信公众号开发平台 浏览:895
知识付费网站java源码 浏览:255
方舟怎么做命令管理 浏览:849
linux流量异常 浏览:675
单片机如何给电脑加密码 浏览:519
如何删掉多余的服务器 浏览:220