标签:blog 使用 文件 ar 数据 html log amp sp
【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】awk '{print NR, NF}' group_file1
1 3
2 3
3 3
4 4
5 3现在我们传入awk两个文件,去除当前操作的文件名以及NR、NF信息:# awk '{print FILENAME,NR, NF}' group_file1 group_file2
group_file1 1 3
group_file1 2 3
group_file1 3 3
group_file1 4 4
group_file1 5 3
group_file2 6 1
group_file2 7 1
group_file2 8 1
group_file2 9 1
group_file2 10 1可见NR并非当前行在文件中的行号,而是整个被操作文件列表被操作的行数量,没处理一行该值会加一。# awk '{if (NF == 3 && $3~/98/) print}' group_file1
wireshark x 987
usbmon x 986
jackuser x 985我们可以将当前绝对路径传入,分析出当前目录名称:# pwd
/home/Myprojects/shell_text_filter/awk
# pwd | awk -F"/" '{print $NF }'
awk类似地,传入文件绝对路径,也可以分析出文件名。# awk 'BEGIN{OFS=" - "}{print $1, $3}' group_file1
wireshark - 987
usbmon - 986
jackuser - 985
vboxusers - 984
aln – 1001ORS输出记录分隔符,通过设置缺省为换行("\n") 的 OFS,我们可以控制在 print 语句结尾自动打印的字符,缺省 ORS 值会使 awk 在新行中输出每个新的 print 语句。如果想使输出的间隔翻倍,可以将 ORS 设置成 "\n\n"。或者,如果想要用单个空格分隔记录(而不换行),将 ORS 设置成 " "。比如如下两个文件:# cat 1 1 2 3 4 5 # cat 2 6 7 8 9 0我们想将其内容连接到一行,可以这样使用:
# awk 'BEGIN{ORS=" "}{print}' 1 2
1 2 3 4 5 6 7 8 9 0下面将group_file1文件每行用符号”-”链接在一起,:# awk 'BEGIN{ORS=" - "}{print}END{ORS="\n";print "\n"}' group_file1
wireshark x 987 - usbmon x 986 - jackuser x 985 - vboxusers x 984 allen - aln x 1001 -
RS变量控制记录分隔符,通过RS 变量告诉 awk 当前记录什么时候结束,新记录什么时候开始。我们可以将一行记录通过设置RS变量将其分成多行记录来分析。比如我们将上面一条awk命令执行结果哪一行传入新的awk,通过设置RS将其分割成多行来分析:# awk 'BEGIN{ORS=" - "}{print}END{ORS="\n";print "\n"}' group_file1 | awk 'BEGIN{RS=" - "}{print $1}'
wireshark
usbmon
jackuser
vboxusers
aln2、 一般变量# awk '{name=$1;id=$3;if (id==985)print name}' group_file1
jackuser
#
通常在BEGIN部分赋值是很有益的,可以在awk表达式进行改动时减少很多麻烦。比如我们想打印id大于1000的用户组名:# awk 'BEGIN{id=1000}{if($3>id)print $1}' group_file1
Alnawk通过设置数据字段值并输出实现修改文件数据字段,当在awk中修改任何数据字段时,实际输入文件是不可修改的,修改的只是保存在缓存里的awk复本。如果我们修改原文件时,需要awk将修改后的内容输出到文件,然后在重命名为原文件。# awk '{if($1=="aln")$3=$3-1; print $1,$2,$3}' group_file1
wireshark x 987
usbmon x 986
jackuser x 985
vboxusers x 984
aln x 1000同样,增加、减少、修改字段均可以有同样的操作。# awk 'BEGIN{total=0}{total+=$3}END{print "total="total}' group_file1
total=4943通过上面这个例子,我们想到可以写一个脚本来实现统计当前文件下面所有文件的大小之和,下面就是这样一个脚本:#!/bin/sh
ls -al | awk '
BEGIN {
total=0
}
{
if (/^[^d]/) { #不统计目录
total += $5
print $1"\t"$5
}
}
END {
print "total size: " total
}'标签:blog 使用 文件 ar 数据 html log amp sp
原文地址:http://blog.csdn.net/shallnet/article/details/38821405