awk总结

25 篇文章 0 订阅

近来看的awk,个人认为最有用的作为总结,作为笔记,备忘。

先学习一下常见的几个宏。如图:


常见的宏有:

RS ( 输入记录之间的分隔符 )Records Seperator.

ORS ( 输入出记录之间的分隔符 )Output Records Seperator.

FS (输入记录中,每个域之间的分隔符)Fields Seperator.

OFS (输出记录中,每个域之间的分隔符)Output Fields Seperator.

NR (当前已经读的记录数)Number of Records read so far.

NF (当前记录中 的 域的个数)Number of Fields in current record.

--------------------------------

ARGC 传入的参数的个数

ARGV 传入的参数的数组

FILENAME 传入参数的文件的名字

=====================================================================

重要概念的引入:

记录和域

1. 记录

awk把每一个以换行符结束的行称为一个记录。

记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。

$0变量:它指的是整条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。

变量NR:一个计数器,每处理完一条记录,NR的值就增加1。如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。

2. 域

记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。


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的值。

例子一:


先打印常用的几个宏:

$ awk '{print NR, NF, ARGC,ARGV[0], ARGV[1], ARGV[2],FILENAME, FNR}' 1.txt  


例子二:

匹配操作符(~)

用来在记录或者域内匹配正则表达式。

如$ awk '$1 ~/^111/' 1.txt 将显示1.txt文件第一列中以111开头的行。


不匹配用(!~)

例子三:

如果要取到1.txt中7777777的字段,因为他在一个记录中,并且还和8888通过“|”联系在一起。

需要通过管道来实现。

如$ awk '/777/{print $1}' 1.txt 

那么输出为:


这样的话,结果中包含了“|8888”,所以管道利用上,


要取得第一个记录,所以再加上一点,


结果得到。

注意:$0指的是每一个记录。$1,$2...指的就是记录中的每一个域了。


例子四:

公司的一个探针需要进行sip测试的 server端log的打印,所以需要killall所有sip的进程(killall sipserver不停的执行,直到“no process killed”字段出现);然后启动 探针ip为183 的sip服务。

所以想用一句话的命令kill掉所有的 sip服务 。 

kill -9 `ps aux | grep sipserver | awk '{print $1}'|head -100`

1、kill -9 pid 杀掉进程号为pid的进程;

2、`` 是键盘上数字1左边的一个按钮上,斜的点号;(kill -9 ` `);

3、ps aux 打印出用户的所有进程。第一列为 进程号id (即pid);

4、ps aux | grep sipserver | awk '{print $1}'|head -100

这条命令,会列出包含sipserver所有进程的id,列表中的前100个。(其实没有100个这样的进程,目的是为了全部列出)

输出结果为:如图:


 


 


这样,执行整个命令

kill -9 `ps aux | grep sipserver | awk '{print $1}'|head -100`

所有的sipserver进程就被杀掉了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值