一、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. [在读]HTML5数据推送应用开发

    最近买的,讲SSE的,才看完前2章.

  2. 51nod 1640 天气晴朗的魔法 二分 + 克鲁斯卡算法(kruskal算法) 做复杂了

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 一开始想的时候,看到要使得最大值最小,那这样肯定是二分这个最大值了 ...

  3. 重新安装Magento CE 2.1.0

    删除 var/cache 文件夹 删除 var/generation文件夹 删除 app/etc/config.php 删除 app/etc/env.php 如果您觉得阅读本文对您有帮助,欢迎转载本文 ...

  4. IOS弹出视图preferredContentSize

    UIViewController.preferredContentSize代理旧方法 contentSizeForViewInPopover. self.contentSizeForViewInPop ...

  5. APP弱网测试点

  6. [文章泛读] The varying faces of a program transformation systems (ACM Inroads, 2012)

    Beevi S. Nadera, D. Chitraprasad, and Vinod S. S. Chandra. 2012. The varying faces of a program tran ...

  7. Asp.Net Core 入门(八)—— Taghelper

    Taghelper是一个服务端的组件,可以在Razor文件中创建和渲染HTML元素,类似于我们在Asp.Net MVC中使用的Html Taghelper.Asp.Net Core MVC内置的Tag ...

  8. Codeforces Round #277.5 (Div. 2)-A. SwapSort

    http://codeforces.com/problemset/problem/489/A A. SwapSort time limit per test 1 second memory limit ...

  9. github更换仓库

    1.找到.git目录   2.打开config文件 3.修改仓库地址 4.重新提交 git push --all origin 这样就替我们的项目换仓啦!!!^_^   分类: git 参考资料: h ...

  10. python爬虫---实现项目(四) 用BeautifulSoup分析新浪新闻数据

    这次只演示了,如何在真实项目内用到BeautifulSoup库来解析网页,而新浪的新闻是ajax加载过来的数据,在这里我们只演示解析部分数据(具体反扒机制没做分析). 代码地址:https://git ...