一、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. shell 中的if语句

    if [ t != "." -a t != ".." ] 之前一直不知道 -a 是什么意思,后来才知道     -a = and  ;    -o = or

  2. HDU 3359 高斯消元模板题,

    http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...

  3. 2017 清北学堂 Day 6终极考试报告

    预计分数: 100+70+70 = 240 实际假分数 : 40+80+70= 190  in cena(好吧不得不承认这个分数,,,,,,=.=) 实际真分数 : 100+80+100 = 280 ...

  4. 微信公众号与HTML 5混合模式揭秘5——JSSDK开发技巧1

    微信公众号与HTML 5混合模式揭秘1——如何部署JSSDK 微信公众号与HTML 5混合模式揭秘2——分享手机相册中照片 微信公众号与HTML 5混合模式揭秘3——JSSDK获取地理位置 微信公众号 ...

  5. Android 两个ArrayList找出相同元素及单个ArrayList删除元素

    //从一个ArrayList中删除重复元素 List<String> arrayList1 = new ArrayList<String>(); arrayList1.add( ...

  6. 【R语言进行数据挖掘】决策树和随机森林

    1.使用包party建立决策树 这一节学习使用包party里面的函数ctree()为数据集iris建立一个决策树.属性Sepal.Length(萼片长度).Sepal.Width(萼片宽度).Peta ...

  7. svn merge当主干修改后合并分支

    例如版本r1的主干创建分支r2,在r2上修改后得到r3,r1之后也修改得到r4,现在合并分支到主干上: 如果r3的修改和r4有冲突会提示出现冲突,因此不用担心主干合并后会被分支操作覆盖,因为这并不是简 ...

  8. js 字符串常用操作

    function Class_String_Common(){ //将字符串 myString 的 start位置 和 end位置 之间的内容替换为 replaceStr this.replace1 ...

  9. rf统计条数

    js模式 直接引用关键字模式

  10. HITICS || 2018大作业 程序人生 Hello's P2P

    摘  要 本文通过分析一个hello.c的完整的生命周期,从它开始被编译,到被汇编.链接.在进程中运行,讲解了Linux计算机系统执行一个程序的完整过程. 关键词:操作系统,进程,程序的生命周期 目 ...