awk 学习之路

awk 主要是用来在linux 处理文本的强大工具,也是一种编程语言,有自己的语法。
开始学习一下:
一,加入有一个test.log 本文文件;
test.log 内容如下:

1,2,first
2,1,second
3,3,third

二,实现功能如下:
1,现在,要输出每一行的前两个字段,代码如下:

[root@crazy~]# awk -F , '{print $1,$2}' test.log

结果如下:

1 2
2 1
3 3

代码解释:-F 为制定读取文件的分割符,上面的代码,即为制定以逗号“,” 为分割符;
$1,$2 表示读取到的文件,第几列,$1 为第一列,$2 为第二列,依次类推;
test.log 为要读取的文件名;

2,增加对列的运算处理。实例:求出第一列大于第二列的每一行,代码如下:

[root@crazy~]# awk -F , '{ if ($1 > $2) print $1,$2}' test.log

结果如下:

2 1

代码解释:awk 支持基本的编程语法,如if, while 等,这样,就可以更加方便的处理文本;

3,格式化输出,指定输出文件的具体格式,实例:结果要以“#”分割,代码如下:

[root@crazy~]# awk -F , '{ printf("%s#%s#\n", $1,$2)}' test.log

结果如下:

1#2#
2#1#
3#3#
##

代码解释:printf 为格式化输出函数。上面的例子,发现,多出最后一行。可以利用if 语句来处理掉:

[root@crazy~]#awk -F , '{if($1) printf("%s#%s#\n", $1,$2)}' test.log

结果如下:

1#2#
2#1#
3#3#

4,对行的处理(使用NR)
示例:打印出第2行的第3列信息

[root@crazy~]#awk 'NR==2{print $3}' 2012.log 

代码解释:NR==2 表示第2行。

[root@crazy~]#awk 'NR ==2,NR==5{print}' 20120525.log

代码解释:打印出第2行到第5行。

你可能感兴趣的:(Shell,服务器,linux,运维,awk)