简单理解awk命令

2016-02-03 16:35:28 7123

1.awk是一个非常棒的数据处理工具,sed常常用于一个整行的处理,awk则比较倾向于一行中分成数段的数据处理,通常的模式是这样的:

    awk ‘条件类型{动作1} 条件类型2{动作2} ....’ filename

2.cat /etc/passwd | awk -F : ‘{print $1 “ ” $4 “ ” $5}’

     

    从以上截图看出用参数-F指定域分隔符,然后打印出/etc/passwd文件的第1列、第4列、第5列,并且每列用tab隔开

    -F 表示指定分隔符,默认的是空格,如果有文档中有空格那么不需要用这个参数,相当于”cut -d “:” -d 1”命令;

    “ ”表示tab;

    在每个动作完成之后都会执行 另起一行;

3.cat /etc/passwd | awk -F : ‘BEGIN {print “name” “ ” “shell”} {print $1 “ ” $7} END {print “end” “ ” “end”}’

     

    awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

3.awk ‘/nginx/’ /etc/passwd

     

此时的awk命令就相当于grep nginx /etc/passwd命令

4.df -h | awk ‘$4>20’ 打印第四列数字大于20的行

     

5.awk几个内建变量

    (1)NF  每一行($x)拥有的栏位总数

    (2)NR  目前awk所处理的是第几行数据

    (3)FS   目前的分隔字节,默认的是空白键

    例如:cat /etc/passwd | awk -F ":" {print $1 " " $7 "  lines:" NR "  columns:" NF}

    

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: