一、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. 通过configmap更新k8s里的mysql配置文件

    背景: 环境注意:在用rancher搭建的k8s里,mysql是起了一个pod,镜像是网上的mysql:5.7 开发人员提出了一个报错“查询时的ONLY_FULL_GROUP_BY错误”,让我改sql ...

  2. mybatis实现使用原生的sql

    1.相应的xml文件中 <select id="selectByCategories" resultType="map" parameterType=&q ...

  3. 第5章 引用类型---JS红宝书书摘系列笔记

    在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,描述的是一类对象所具有的属性和方法.而对象是某个特定引用类型的实例. 一.Object类型 可以通过Object构造函数创 ...

  4. silverlight GPS监控,视频监控界面

    周末闲着自己做了个玩玩

  5. okhttp使用心得(https验证不通过)(一)

    之前项目使用的是okhttp3.4版本的,tls协议支持1.0 1.2 等等 后来换成okhttp3.8.1,发现握手失败 找了好多原因之后  发现吧tls加上1.0后,就可以握手成功了,但是tls1 ...

  6. 闹心的CSDN

    近来搜索技术文章时,每次来到csdn上时,显示全文就提示登陆. 唉登陆就登陆吧,记不清账号了,就用手机号获取验证码.然后更改密码.我靠,密码居然要8位以上,要有大小写字母.数字和标点符号的组合... ...

  7. 使用 Visual Studio 2017 部署 Azure 应用服务的 Web 应用

    本快速入门介绍了如何使用 Visual Studio 2017 创建并部署 Azure Web 应用.在本教程中完成的所有操作均符合1元试用条件. 本快速入门介绍了如何使用 Visual Studio ...

  8. Linux SSH无密码login

    一:ssh原理图为: 1.就是为了让两个linux机器之间使用ssh不需要用户名和密码.采用了数字签名RSA或者DSA来完成这个操作 2.模型分析 假设 A (192.168.20.59)为客户机器, ...

  9. 洛谷P1036 选数

    题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...

  10. Caused by: java.lang.NoClassDefFoundError: com/sun/tools/javac/util/List at

    折腾了一下的时间,都没有找到解决的方案,在网上搜了一下答案都是让清理编译环境和重新打包之类的.就这样折腾一下,还没有解决问题.之所以会抛出找不到类的问题,需要排查你使用这个包的类是否存在,存在之后 查 ...