awk简单使用

awk

用于在linux/unix下对文本和数据进行处理,支持用户自定义函数和动态正则表达式等先进功能。

命令格式:

awk 'BEGIN{ print “start” } pattern { commend } END{print "end"}' file
awk "BEGIN{ print “start” } pattern { commend } END{print "end"}" file

awk命令也可以从stdin中读取

构成:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块。这三个部分是可选的。任意一个部分都可以不出现在脚本中。

awk的工作原理:

第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。

内置变量:

ARGC               命令行参数个数   
ARGV               命令行参数排列   
ENVIRON            支持队列中系统环境变量的使用 
FILENAME           awk浏览的文件名  
FNR                浏览文件的记录数 
FS                 设置输入域分隔符,等价于命令行 -F选项    
NF                 浏览记录的域的个数   
NR                 已读的记录数 
OFS                输出域分隔符 
ORS                输出记录分隔符   
RS                 控制记录分隔符   
$0                 这个变量包含执行过程中当前行的文本内容    
$1~$n              这个变量包含第1(n)个字段的文本内容

常用选项:

-F  fs       指定用于输入数据的列分隔符fs                
-v  var=value   在awk程序执行之前指定一个值value变量给var。这些变量值用于awk程序的BEGIN块    
-f  program-file 指定一个awk程序文件,代替在命令行指定awk指令
打印指定的列

输出格式:print和printf(可指定格式)
- print的使用格式:print item1, item2, …
- printf的使用格式:printf format, item1, item2, …

$ awk '{print $1,$2}' a.txt 打印a.txt文件的第一列,第二列
设置字段定界符
$ awk -F:'{print $NF}' /etc/passwd 或者  
$ awk 'BEGIN{ FS=":" }{ print $NF }' /etc/passwd

模式

有以下四种模式:
一:/正则表达式/:使用通配符的扩展集。
二:关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
三:模式匹配表达式:用运算符 ~(匹配)和 ~!(不匹配)。
四:BEGIN语句块、pattern语句块、END语句块

操作

由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内
主要部分:变量或数组赋值,输出命令,内置函数,控制流语句

传参:
  • 传外部变量给awk
    -v 可以将外部值(并非来自stdin)传递给awk:
var=10000  echo | awk -v variable=$var '{ print variable }'
  • 另一种传递外部变量方法:
var1="aaa" var2="bbb" echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
  • 当输入来自于文件时使用:
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

变量之间用空格分隔作为awk的命令行参数跟随在BEGIN、{}和END语句块之后。

数组应用

awk 中的数组不必提前声明。数组元素用0或空字符串来初始化。

数组的定义

数字做数组索引:

Array[1]="sun" Array[2]="kai"

字符串做数组索引:

Array["first"]="www" Array["last"]="name"

print Array[1]会打印出sun;print[“last”]会得到name。

读取数组的值:

{ for(item in array) {print array[item]}; }  输出的顺序是随机的    
{ for(i=1;i<=len;i++) {print array[i]}; }    Len是数组的长度
数组相关函数
得到数组长度:
awk 'BEGIN{info="it is a test";lens=split(info,tA,""); print length(tA) length(tA),lens;}' 结果为:4 4

length返回数组长度,split进行分割字符串为数组,也会返回分割得到数组长度。

输出数组内容(无序,有序输出):
awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'    
4 test  
1 it     
2 is     
3 a
awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}'   
1 it     
2 is     
3 a     
4 test

==注意==:数组下标是从1开始,与C数组不一样。

内置函数

主要分以下4种类型:算数函数、字符串函数、其它一般函数、时间函数。

算数函数:
格式       描述 
sin( x ) 返回 x 的正弦;x 是弧度。    
exp( x ) 返回 x 幂函数。  
log( x ) 返回 x 的自然对数。  
sqrt( x )    返回 x 平方根。     
int( x ) 返回 x 的截断至整数的值。    
rand( )        返回任意数字 n,其中 0 <= n < 1srand( [expr] ) 将 rand 函数的种子值设置为 Expr参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。
字符串函数
split( String, A, [Ere] )  
将String参数指定的参数分割为数组元素A[1],A[2],...,A[n],并返回n变量的值。    

tolower( String )


返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。

toupper( String )
“`

返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 14.04 下 Virtual Judge 的搭建

前期准备工作 1.1 一个Linux系统 因为现场赛的缘故&#xff0c;我一直使用的都是ubuntu。 这里我测试用的是Ubuntu14.04 Desktop 64bit ,当然选择Server会更好一些. 系统的安装不再赘述&#xff0c;作为服务器请选用Server版本。1.2 更新源 在搭建环境之前&#xff0c;请确保…

BitMap的原理介绍与实现

BitMap 位图&#xff08;bitmap&#xff09;是一种非常常用的结构&#xff0c;在索引&#xff0c;数据压缩等方面有广泛应用。位图是通过将数组下标与应用中的一些值关联映射&#xff0c;数组中该下标所指定的位置上的元素可以用来标识应用中值的情况&#xff08;是否存在或者数…

MySQL与PHP连接

1、mysql_connect()-建立数据库连接 格式&#xff1a; resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]]) 例&#xff1a; $conn mysql_connect("localhost", "username", "pa…

QML Profiler性能优化教程

QML Profiler 2018年1月26日 vincent 对于一个程序的开发&#xff0c;性能优化是开发中的一个重要步骤。 我们肯定不希望开发出来的程序表现出卡顿&#xff0c;最好是处处流畅&#xff0c;丝滑般的体验。 对于C程序&#xff0c;我们有很多方法可以做性能优化&#xff0c;例如…

uburntu在不能自动获取网络时的联网设置

一&#xff1a;网络基础配置 1. eth0设置不正确&#xff0c;导致无法正常启动&#xff0c;修改eth0配置文件就好 ubuntu 12.04的网络设置文件是/etc/network/interfaces&#xff0c;打开文件&#xff0c;会看到 auto lo iface lo inet loopback 这边的设置是本地回路。在后…

计算机显卡知识普及

显卡知识普及 一、什么是显卡&#xff1f; 显示接口卡&#xff08;Video card&#xff0c;Graphics card&#xff09;、显示器配置卡简称为显卡&#xff0c;是个人电脑基本组成部分之一。 用途是将计算机系统所需要的显示信息进行转换驱动&#xff0c;并向显示器提供信号&…

整除的尾数

Problem Description 一个整数&#xff0c;只知道前几位&#xff0c;不知道末二位&#xff0c;被另一个整数除尽了&#xff0c;那么该数的末二位该是什么呢&#xff1f; Input 输入数据有若干组&#xff0c;每组数据包含二个整数a&#xff0c;b(0<10000,10<b<100)&…

QML 控件大全

QML TypeContainerDelayButtonDialDialogButtonBoxDialogDrawerMenuMenuBarOverlayPageIndicatorRangeSliderScrollViewSpinBoxStackViewSwipeViewSwitchTabBarToolBarToolSeparatorToolTipTumbler QML Type 本篇主要介绍QtQuick Controls 2,Qt Creator 5.10 1.Container im…

斐波那契的整除

Description 已知斐波那契数列有如下递归定义&#xff0c;f(1)1,f(2)1, 且n>3,f(n)f(n-1)f(n-2)&#xff0c;它的前几项可以表示为1&#xff0c; 1&#xff0c;2 &#xff0c;3 &#xff0c;5 &#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34…&#xff0c;现在的…

Qt与QML的枚举绑定(C++枚举)

Qt到QML的枚举绑定 QML中是不支持c的枚举类型的&#xff0c;所以我们可以使用Qt的元对象系统&#xff0c;即MOS,来帮助我们实现。 进行绑定的好处就是&#xff0c;以后数据发生变化的时候&#xff0c;就是枚举发生增加修改&#xff0c;添加等的时候&#xff0c;不需要在QML中…

深入理解Qt的.pro文件

深入理解Qt的pro文件模板变量生成目录生成的应用程序名编译选项目标文件目录包含头文件包含源文件包含资源文件附加头文件包含链接库预编译宏平台相关性处理指定来自ui文件位置指定界面翻译文本列表指定图标 深入理解Qt的.pro文件 一般Qt项目我们是使用Qt Creator自动生成的&…

Ubuntu 用vsftpd 配置FTP服务器

最近开学&#xff0c;有好多课程结束后都需要将文件考到优盘里&#xff0c;而本人又有健忘的毛病&#xff0c;经常忘记带优盘&#xff0c;所以就搭建了自己的ftp服务器&#xff0c;也算是用技术放松自己吧。闲话少叙&#xff0c;进入正题&#xff1a; 网上关于ftp搭建的文章很…

linux的程序打包deb

deb安装包 deb是Unix系统(其实主要是Linux)下的安装包&#xff0c;基于 tar 包&#xff0c;因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。 由于 Unix 类系统对权限、所有者、组的严格要求&#xff0c;而 deb 格式安装包又经常会涉及到系统比较底层的操作&#…

利用pyinstaller打包python3程序

pyInstaller是一款用于将pyhon程序打包成exe文件的工具&#xff0c;pyInstaller不是一个python的包&#xff0c; 只需要把pyInstaller的文件下载下来放到任意为止都可以&#xff0c;也就是说pyInstaller相当于独立出来专门干打包python的工具&#xff0c;这货是工具不是库&…

C++11新特性之左值右值及移动语句与完美转发

C左值右值左值和右值的由来什么是左值和右值左值右值的本质引用左值引用右值引用 移动语句与完美转发移动语句实现移动构造函数和转移赋值函数stdmove完美转发Perfect Forwarding C左值右值 自从C11发布之后&#xff0c;出现了一个新的概念&#xff0c;即左值和右值&#xf…

nginx中的nginx.conf.default配置

#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1;#全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;#工作模式及连接数上限 events {…

C++11新特性之泛型编程与模板

模板泛型编程函数模板普通函数模板成员函数模板函数模板重载模板函数的特化 类模板类模板中的成员函数模板类模板的特化与偏特化类模板成员特化 模板 Template所代表的泛型编程是C语言中的重要组成部分。 泛型编程 泛型编程&#xff08;Generic Programming&#xff09;是…

WordPress更改“固定链接”后 页面404原因及解决方法(Nginx版)

网上盛传的方法是&#xff1a; 在 /etc/nginx/nginx.conf文件的 loction / {} 中添加 if (-f $request_filename/index.html){rewrite (.*) $1/index.html break; }if (-f $request_filename/index.php){rewrite (.*) $1/index.php; }if (!-f $request_filename){rewrite (.*…

C++类型萃取之type_traits和type_info

类型萃取类型判断typeiddecltype和declvalenable_if 类型萃取 通过type_traits可以实现在编译期计算、查询、判断、转换和选择&#xff0c;增强了泛型编程的能力&#xff0c;也增强了我们程序的弹性&#xff0c;让我们能够在编译期就能够优化改进甚至排错&#xff0c;进一步提…

使用Phpstorm实现远程开发

Phpstorm除了能直接打开本地文件之外&#xff0c;还可以连接FTP&#xff0c;除了完成正常的数据传递任务之外&#xff0c;还可以进行本地文件与服务端文件的异同比较&#xff0c;同一文件自动匹配目录上传&#xff0c;下载&#xff0c;这些功能是平常IDE&#xff0c;FTP软件中少…