一、awk简介

 1.awk是3个姓氏的首字母,代表该语言的3个作者,awk的版本有很多,包括:旧版awk,新版awk(nawk),GNU awk(gawk)等。

   awk程序有awk命令,括在引号或写在文件中的指令以及输入文件这几个部分组成。

 

 2.检查系统中是否安装有awk

 [root@rhel helinbash]# which awk

 /bin/awk



 [root@rhel helinbash]# which gawk

 /bin/gawk



 [root@rhel helinbash]# ls -l /bin/awk /bin/gawk

 lrwxrwxrwx 1 root root      4 Oct 10  2013 /bin/awk -> gawk

 -rwxr-xr-x 1 root root 320416 Jan 15  2007 /bin/gawk



注:以后的例子都是采用gawk命令

AWK简介及使用实例 http://www.linuxidc.com/Linux/2013-12/93519.htm

AWK 简介和例子 http://www.linuxidc.com/Linux/2012-12/75441.htm

Shell脚本之AWK文本编辑器语法 http://www.linuxidc.com/Linux/2013-11/92787.htm

正则表达式中AWK的学习和使用 http://www.linuxidc.com/Linux/2013-10/91892.htm

文本数据处理之AWK 图解 http://www.linuxidc.com/Linux/2013-09/89589.htm

二、awk工作原理



 1.以下内容的names文件名举例按步骤解析awk的处理过程

 (1)

 vim    names

 Tom   Savage  100

 Molly Lee        200

 John  Doe       300

 (2)

 [root@rhel helinbash]# cat names.txt | cut -d  ' ' -f 2

 Savage

Lee

[root@rhel helinbash]# cat names.txt | cut -d  '\t' -f 2  

 cut: the delimiter must be a single character

 Try `cut --help' for more information.

 [root@rhel helinbash]# 

(3)

 [root@rhel helinbash]# gawk '{ print $1,$3 }' names.txt

 Tom 100

 Molly 200

 John 300

[root@rhel helinbash]# gawk '{ print $1,$3 }' names.txt

Tom    100

Molly  200

John   300

2. 原理图

 FS:Field separator(分隔符)

 OFS:Output Field Separator



第三步:awk中print命令打印字段;{print $1,$3} 只取有用的第一段和第三段;在打印时$1和$3之间由空格间隔。

“,”逗号是一个映射到内部的输出字段分隔符(OFS),OFS变量缺省为空格,逗号在输出时被空格替换。

接下来,awk处理下一行数据,直到所有的行处理完。

三、从文件输入

 1.格式:

 gawk  '/匹配字符串/'

 gawk  '{处理动作}'

 gawk  '/ 匹配字符串/ {处理动作}' 文件名



 2. 使用awk查找文件中包含root的行

 [root@rhel helinbash]# gawk '/root/' /etc/passwd

 root:x:0:0:root:/root:/bin/bash

 operator:x:11:0:operator:/root:/sbin/nologin



#使用grep命令查找

 [root@rhel helinbash]# grep root /etc/passwd

 root:x:0:0:root:/root:/bin/bash

 operator:x:11:0:operator:/root:/sbin/nologin





3.使用gawk命令查找以root开头的行

 [root@rhel helinbash]# gawk '/^root/' /etc/passwd

 root:x:0:0:root:/root:/bin/bash



4.

 [root@rhel helinbash]# gawk '/^root/'

 root

 root

 root

 root

 studnet

 t^H^[[3~^H^H^H this is a demo string wih^H^H iclcude root key woard

 

root hello abc

root hello abc

 

注:红色的字体是过滤后的输出,这个是gawk的交互式执行命令



 5. 以冒号为分隔符,打印第1列和第3列的数据,两列之间用一个空格分隔

 [root@rhel helinbash]# gawk -F: '{ print $1,$3 }' /etc/passwd

 root 0

 bin 1

 daemon 2

 adm 3

 lp 4

 sync 5

 shutdown 6

 halt 7

 mail 8

 news 9

 uucp 10

 operator 11

 games 12

 gopher 13

 ftp 14

 nobody 99

 nscd 28

 vcsa 69

 rpc 32

 mailnull 47

 smmsp 51

 pcap 77

 ntp 38

 dbus 81

 avahi 70

 sshd 74

 rpcuser 29

 nfsnobody 65534

 haldaemon 68

 avahi-autoipd 100

 xfs 43

 gdm 42

 sabayon 86



 named 25



6. 查看包含root行的行,并打印这些行的第1列和第3列

 [root@rhel helinbash]# gawk -F: '/root/{ print $1 $3 }' /etc/passwd  

 root0

 operator11



7. 格式化输出print函数

awk命令操作处理部分是放在“{}”(括号)中;print函数将变量和字符夹杂着输出。 如同linux中的echo命令

 

、从命令输入

 1.awk还可以处理通过管道接收到的linux命令的结果,shell程序通常使用awk做深处理。

 

(1) 格式:

 命令| gawk '/匹配字符串/'

 命令| gawk '{处理动作}'

 命令| gawk '/匹配字符串/ {处理动作}'

 (2)举例

 [root@rhel helinbash]# date

 Mon May 26 10:10:01 CST 2014

 

[root@rhel helinbash]# date | gawk '{print "Month:"$2"\nYear:"$1 }' 

Month:May

Year:2014



[root@rhel helinbash]# date | gawk '{print "Month:",$2"\nYear:",$1 }' 

Month: May

Year: 2014



注意:如果在上面添加了逗号的话,那么打印结果的冒号后会多一个空格作为分隔符。



(3)注意上面的例子,一种是直接在Month后连接$2,另一种是在Year和$6之间使用了逗号,都由OFS决定。

AWK原理及命令和文件输入的更多相关文章

  1. awk同时处理多个文件

    关于awk的多文件处理: awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件,如1.shell的Pathname Expansion方式:awk '{...}' *.txt # *.t ...

  2. Linux下的awk文本分析命令详解

    一.简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/ ...

  3. 用Copy命令合并文件

    用Copy命令合并文件 这个文章是在我以前的百度空间里面发表过的,后来因为某个内分泌失调的管理员把我的空间http://hi.baidu.com/kamdy   封了! 旧事不提,还是回到主题吧,这个 ...

  4. AWK与SED命令

    linux系统比较常用的AWK与SED命令,这两个命令主要是格式化文本文件信息.接下来将详细介绍这两个命令的基本用法以及可以实现的功能. 一.AWK命令 AWK语言的基本功能是在文件或者字符串中基于指 ...

  5. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  6. 巧用FTP命令进行文件传输

    巧用FTP进行文件传输   Internet作为现代信息高速公路已深入我们的生活,其中它所提供的电子邮件Web网站信息服务已被越来越多的人所熟知和使用.FTP作为Internet的功能之一,虽然没有像 ...

  7. awk和sed命令

    awk awk是一个强大的编辑工具,可以在无交互的情况下实现相当复杂的文本操作 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 a ...

  8. 技能篇:awk教程-linux命令

    前言 AWK是一门解释型的编程语言.用于文本处理,它的名字来源于它的三位作者的姓氏:Alfred Aho, Peter Weinberger 和 Brian Kernighan awk 程序结构 运行 ...

  9. Linux命令:修改文件权限命令chmod、chgrp、chown详解

    Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权 限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而 ...

随机推荐

  1. clearfix的运行机制和进化

    话说为什么要把这个记下来,因为昨天去面试,问了clearfix的原理,当时脑子不清晰,回答得真是想要咬舌自尽.遂,决定,要搞清楚来龙去脉~~~(资料来自网上博主们,)http://www.aseoe. ...

  2. httpd.exe占用100%CPU

    客户VPShttpd.exe进程占用100%CPU百度搜了下,很多文章: 在网上也没有能够直接找到比较好的解决方法,后来在一个帖子上看到说,有可能是apache与其他的软件冲突了(参考http://t ...

  3. Linux下环境搭建(一)——java、tomcat配置

    通过2个周末小憩的时间,终究是把linux环境下的jenkins+gitlab+jmeter框架给弄好了.jenkins的配置系列文章,可以翻看我以前的博文.此次,就将在linux下搭建环境的过程以博 ...

  4. spark性能测试理论-Benchmark(转)

    一.Benchmark简介Benchmark是一个评价方式,在整个计算机领域有着长期的应用.正如维基百科上的解释“As computer architecture advanced, it becam ...

  5. uvm_agent——007(特工)

    詹姆斯·邦德作为007的代言人,很好地诠释了agent的含义.但是在计算机系统中agent(代理)指能自主活动的软件或者硬件实体.在UVC中agent作为容器,实例化VIP的所有模块包括driver, ...

  6. 系统妈Win10系统64位和32位快速专业版

    win10系统64位快速专业安装版 V2016年 系统妈:http://www.xitongma.com/ Ghost Win10 64位正式装机专业版2016 微软向Windows用户推送了win1 ...

  7. Ubuntu14.04 32位安装Youcompleteme

    前一段时间在ubuntu16.04 64位上安装了vim插件Youcompleteme,花了两三天才弄好.今天在ubuntu14.04 32位上安装同样的插件,才知道之前所做的安装原来是多么的简单.今 ...

  8. NSCopying协议和copy方法

    不是所有的对象都支持 copy需要继承NSCopying 协议(实现 copyWithZone: 方法)同样,需要继承NSMutableCopying 协议才可以使用mutableCopy(实现 mu ...

  9. 原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历

    一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  10. 一、numpy入门

    Array import numpy as np # create from python list list_1 = [1, 2, 3, 4] array_1 = np.array(list_1)# ...