AWK原理及命令和文件输入

摘要:
awk程序由awk命令、包含在引号中或写入文件中的指令以及输入文件组成。2.检查系统中是否安装了awk[root@rhelhelinbash]#whihawk/bin/awk[root@rhelhelinbash]#whichgawk/bin/gawk[root@rhelhelinbash]#Ls-l/bin/awk/bin/gawklrwxrwxrwx1rootroot4Oct102013/bin/awk˃gawk-rwxr-xr-x1rootroot320416 2007年1月15日/bin/gak注意:以下示例是gawk命令awk的介绍和使用http://www.linuxidc.com/Linux/2013-12/93519.htmAWK引言和示例http://www.linuxidc.com/Linux/2012-12/75441.htmShellAWK文本编辑器脚本语法http://www.linuxidc.com/Linux/2013-11/92787.htm在正则表达式中学习和使用AWKhttp://www.linuxidc.com/Linux/2013-10/91892.htm文本数据处理AWK图http://www.linuxidc.com/Linux/2013-09/89589.htm2、awk 1的工作原理。以下内容的名称文件名用于通过步骤vimnamesTomSavage100MollyLee200JohnDode300[root@rhelhelinbash]#catnames.txt | cut-d“”-f2 SavageLee[root@rhelhelinbash]#catnames.txt | cut-d“”-f2cut:限制必须是单个字符请尝试`cut--help'以重新格式化。[ root@rhelhelinbash ]#[ root@rhelhelinbash]#gawk“{print$1,$3}”名称.txtom100Molly200John300[root@rhelhelinbash]#Gawk“{print$1,$3}”名称。txtTom100Molly200Jhn3002.原理图FS:Fieldseparator(分隔符)OFS:OutputFieldSeparator步骤3:在awk中打印命令以打印字段;{打印$1,$3}只取第一和第三个有用的段落;打印时,$1和$3用空格分隔。
一、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  ' ' -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原理及命令和文件输入第1张

第三步: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
 Oracle 500
 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" Year:"$1 }' 

Month:May
Year:2014

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


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

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

免责声明:文章转载自《AWK原理及命令和文件输入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android Studio升级3.6 Build窗口出现中文乱码问题解决方案jquery实现京东轮播图的简单写法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux 搭建 nexus 私服及配置

安装篇 1、tar -zxvf nexus-latest-bundle.tar.gz 2、cdnexus-2.13.0-01/bin 3、./nexus start 这时可能提示 ****************************************WARNING – NOT RECOMMENDED TO RUN AS ROOT*********...

pentaho之kettle篇---kettle基本操作

今天先来做一个简单的kettle的例子。 打开输入,选择CSV文件输入。 双击CSV文件输入图标,可以看见如下: 步骤名称:就是你这一步的名字,可以任意取,原则就是要明白,清楚这一步是做了什么操作。 文件名:是你要选取的这个.CSV结尾的文件的名称。 列分隔符:每个CSV文件都是有一定的规则的,要么是分号是分隔符,要么是逗号是分隔符等等。 包含列头行:...

在Kali Linux中下载工具Stegsolve

关键字:Java,Stegsolve,Write Up 一、首先需要配置Java环境。 1.下载最新的Java JDK。 注意选择Accept License Agreement,并下载.tar.gz格式的文件。 2.打开命令行。切换到下载的文件所在路径后 使用以下指令解压缩文件并切换到/opt路径。(注意:jdk-12为我下载的版本,应以自己下载版本为准...

解决mysql 数据库连接密码

解决mysql 数据库连接密码用到的命令: bin>net stop mysql bin>mysqld --skip-grant-tables bin>mysql mysql>use mysql mysql>update user set password=password("123456") where user="root...

VMware安装的Linux系统忘记密码 怎么修改root密码

因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回root密码,再次我帮 像我一样的新手朋友们 总结下 如何找回自己虚拟机linux的root密码。 重启系统后出现GRUB界面在引导装载程序菜单上,用上下方向键选...

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel

Ubuntu 16.04 LTS 安装 Nginx/PHP 5.6/MySQL 5.7 (LNMP) 与Laravel 1、MySQL安装【安装 MariaDB】MariaDB是MySQL的一个分支首先,更新升级系统$ sudo apt update$ sudo apt upgrade安装MariaDB:$ sudo apt install mariadb...