AWK原理及命令和文件输入
一、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原理及命令和文件输入的更多相关文章
- awk同时处理多个文件
关于awk的多文件处理: awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件,如1.shell的Pathname Expansion方式:awk '{...}' *.txt # *.t ...
- Linux下的awk文本分析命令详解
一.简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是linux/ ...
- 用Copy命令合并文件
用Copy命令合并文件 这个文章是在我以前的百度空间里面发表过的,后来因为某个内分泌失调的管理员把我的空间http://hi.baidu.com/kamdy 封了! 旧事不提,还是回到主题吧,这个 ...
- AWK与SED命令
linux系统比较常用的AWK与SED命令,这两个命令主要是格式化文本文件信息.接下来将详细介绍这两个命令的基本用法以及可以实现的功能. 一.AWK命令 AWK语言的基本功能是在文件或者字符串中基于指 ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- 巧用FTP命令进行文件传输
巧用FTP进行文件传输 Internet作为现代信息高速公路已深入我们的生活,其中它所提供的电子邮件Web网站信息服务已被越来越多的人所熟知和使用.FTP作为Internet的功能之一,虽然没有像 ...
- awk和sed命令
awk awk是一个强大的编辑工具,可以在无交互的情况下实现相当复杂的文本操作 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 a ...
- 技能篇:awk教程-linux命令
前言 AWK是一门解释型的编程语言.用于文本处理,它的名字来源于它的三位作者的姓氏:Alfred Aho, Peter Weinberger 和 Brian Kernighan awk 程序结构 运行 ...
- Linux命令:修改文件权限命令chmod、chgrp、chown详解
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权 限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而 ...
随机推荐
- 为什么static方法中不可以调用非static方法
Java是面向对象的语言,所有的变量,方法都是针对对象而言的.一般来说,要调用一个方法,你需要new 这个方法的对象. 什么时候用static? 如果你想要: 对于一个类的所有对象共享一个变量或者是方 ...
- nodejs 学习(2) 中间件
var connect=require('connect'), morgan=require('morgan'),//日志 bodyparser=require('body-parser'), ses ...
- Linux--NiaoGe-Service-04
操作系统版本:CentOS 6.10 x86_64 查看内核所获取到的网卡信息 [root@xueji ~]# dmesg | grep -in eth :e1000 ::-bit) :0c::6b: ...
- 最大流bfs
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- jquery测试解析
1.下列获取元素范围大小顺序错误的是 (选择一项) 1 A: B: C: D: 本题选择D 解析: 获取元素范围大小顺序依次为: $(#one).siblings("div")&g ...
- HDU4035 Maze(期望DP)
题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 有n个房间,由n-1条隧道连通起来,形成一棵树,从结点1出发,开始走,在每个结点i ...
- uvm_reg_defines——寄存器模型(四)
文件: src/marcos/uvm_reg_defines 类: 无 该文件是寄存器模型src/reg/* 文件对于的宏文件,主要定义了寄存器地址位宽,寄存器数据位宽,字节的大小.计算机从最初的8, ...
- Slacklining 2017/2/7
原文 Proline Slacklining's expansion is still in process,but it already has a professional scene.Some ...
- 添加/删除 windows下Git右键菜单
从网上搜索了些方法,总结一下 不显示右键菜单: 方法1: 安装的时候选择不添加右键菜单. 方法2(绝对有效): 运行CMD Windows 64 输入命令(地址为git安装地址) cd "C ...
- Nodejs + Jshint自动化静态代码检查
1. 目的 提交代码前能够自动化静态代码检查,提高代码质量 2. 准备 1. Nodejs安装: 官方地址:http://nodejs.org/ 安装说明:根据电脑配置下载对应的版本进行 ...