awk命令个人总结(以CentOS 6.3环境下shell为例)

来源:互联网 发布:小灰狼打印软件注册码 编辑:程序博客网 时间:2024/06/06 02:41

awk命令个人总结(以CentOS 6.3环境下shell为例)

最近学了一点Shell里的awk命令基础。下面根据自己所学做一些总结,仅供日后翻阅。如有错误,烦请指正。


awk是什么?

awk其实算是一种编程语言,仔细拓展开可以有好多好多内容,而我学的知识一点皮毛,可能连入门都算不上了。在Linux下,awk可以用来对一些文本数据进行筛选和扫描处理。

awk是怎么工作的?

awk一般可以搭配管道符使用,将送入awk出来的文本文件扫描处理。对于文件的名字赋予$0,即第一个位置变量。awk一次扫描一行文本,从第一行到最后一行,寻找匹配要求的行,进行用户操作。awk默认的分隔符是空格或者制表符,每一行依据分隔符,分为多个列,或者更准确讲是数据段,分别赋予$1、$2…..
基本结构如下

       `awk '条件1{操作1}条件2{操作2}'`文件名

条件:一般是关系表达式
操作:默认处理是print打印输出处理行

awk的两个特殊条件

BEGIN和END,这两个放在条件位置,可以使在其他命令执行前或执行后进行BEGIN和END对应的指令。具体下面再举例子说明。

awk的基本选项

-F 指定分隔符,-F后面加指定的分隔符-f 指定脚本,-f后面加脚本文件,从该脚本中读取awk命令,代替输入

awk使用例子

1.先正则表达式匹配整个test文档里的空白行,每一个空白行打印一次 “blank line”

 awk '/^$/{print "blank line"}' test

2.正则表达式匹配/etc/sysconfig/network里的的主机名行,打印主机名

awk '/HOSTNAME/{print}' /etc/sysconfig/network

3.用-f 选项调用一个awk脚本来对sample.txt做操作,awk脚本是test.sh

awk -f test.sh sample.txt

4.输出a,b,c,$1 $2 $3 分别对应输出的a,b,c

echo a b c | awk'{print $1,$2,$3}'

5.读取输入的行并输出数据段个数

echo a b c | awk '{print $0}'

6.指定分隔符是” : “,输出passwd文本的第一列,即系统的用户名

awk -F ":" '{print $1}' /etc/passwd //写法1awk 'BEGIN {FS=":"}{print $1}' /etc/passwd //写法2

7.awk中的变量,默认是空字串或者0

awk '/^$/ {x+=1} END {print x}' test //统计空白行行数并输出

8.awk结合条件语句使用,因为awk都使用了BEGIN模式,所以,在没读取test文档内容之前,就回把BEGIN后面的指令执行。

awk '{if($1<10) print "a"; else print "b"}' test  //如果test文件中每一行的第一个参数小于10,则输出a,否则输出bawk 'i=1 {} BEGIN{while(i<=10) {++i;print i}}'   //i初始值为1,当i<=10,输出i的值,i++awk 'BEGIN { do { ++x;print x } while (x<=10)}'  //do-while格式awk 'BEGIN{for(i=1;i<=10;i++) print i}'   //for循环
0 0
原创粉丝点击