【转】AWK常用
awk是个优秀文本处理工具,可以说是一门程序设计语言。下面是awk内置变量。
一、内置变量表
| 属性 | 说明 |
| $0 | 当前记录(作为单个变量) |
| $1~$n | 当前记录的第n个字段,字段间由FS分隔 |
| FS | 输入字段分隔符 默认是空格 |
| NF | 当前记录中的字段个数,就是有多少列 |
| NR | 已经读出的记录数,就是行号,从1开始 |
| RS | 输入的记录他隔符默 认为换行符 |
| OFS | 输出字段分隔符 默认也是空格 |
| ORS | 输出的记录分隔符,默认为换行符 |
| ARGC | 命令行参数个数 |
| ARGV | 命令行参数数组 |
| FILENAME | 当前输入文件的名字 |
| IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
| ARGIND | 当前被处理文件的ARGV标志符 |
| CONVFMT | 数字转换格式 %.6g |
| ENVIRON | UNIX环境变量 |
| ERRNO | UNIX系统错误消息 |
| FIELDWIDTHS | 输入字段宽度的空白分隔字符串 |
| FNR | 当前记录数 |
| OFMT | 数字的输出格式 %.6g |
| RSTART | 被匹配函数匹配的字符串首 |
| RLENGTH | 被匹配函数匹配的字符串长度 |
| SUBSEP | \034 |
2、实例
1、常用操作
[chengmo@localhost ~]$ awk '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash/^root/ 为选择表达式,$0代表是逐行
2、设置字段分隔符号(FS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd
root /bin/bashFS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。
3、记录条数(NR,FNR使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd
1 root /bin/bash
2 bin /sbin/nologin
3 daemon /sbin/nologin
4 adm /sbin/nologin
5 lp /sbin/nologin
6 sync /bin/sync
7 shutdown /sbin/shutdown
……NR得到当前记录所在行
4、设置输出字段分隔符(OFS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
1^^root^^/bin/bashOFS设置默认字段分隔符
5、设置输出行记录分隔符(ORS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' /etc/passwd
1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin从上面看,ORS默认是换行符,这里修改为:”^^”,所有行之间用”^^”分隔了。
6、输入参数获取(ARGC ,ARGV使用)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' /etc/passwd
ARGC=2
0=awk
1=/etc/passwdARGC得到所有输入参数个数,ARGV获得输入参数内容,是一个数组。
7、获得传入的文件名(FILENAME使用)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print FILENAME}{print FILENAME}' /etc/passwd
/etc/passwd
FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量。
8、获得linux环境变量(ENVIRON使用)
[chengmo@localhost ~]$ awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd
/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin:/usr/local/mysql/bin:/home/web97/binENVIRON是子典型数组,可以通过对应键值获得它的值。
9、输出数据格式设置:(OFMT使用)
[chengmo@localhost ~]$ awk 'BEGIN{OFMT="%.3f";print 2/3,123.11111111;}' /etc/passwd
0.667 123.111OFMT默认输出格式是:%.6g 保留六位小数,这里修改OFMT会修改默认数据输出格式。
10、按宽度指定分隔符(FIELDWIDTHS使用)
[chengmo@localhost ~]$ echo 20100117054932 | awk 'BEGIN{FIELDWIDTHS="4 2 2 2 2 3"}{print $1"-"$2"-"$3,$4":"$5":"$6}'
2010-01-17 05:49:32FIELDWIDTHS其格式为空格分隔的一串数字,用以对记录进行域的分隔,FIELDWIDTHS="4 2 2 2 2 2"就表示$1宽度是4,$2是2,$3是2 .... 。这个时候会忽略:FS分隔符。
11、RSTART RLENGTH使用
[chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
11 11 4
[chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 –1RSTART 被匹配正则表达式首位置,RLENGTH 匹配字符长度,没有找到为-1.
【转】AWK常用的更多相关文章
- AWK常用技巧
1.1 介绍 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...
- shell编程系列20--文本处理三剑客之awk常用选项
shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...
- awk 常用选项及数组的用法和模拟生产环境数据统计
awk 常用选项总结 在 awk 中使用外部的环境变量 (-v) awk -v num2="$num1" -v var1="$var" 'BEGIN{print ...
- 【转】sed & awk常用正则表达式
正则表达式元字符 正则表达式中有两种基本元素: 以字面值或变量表示的值(如.代表任意单个字符). 操作符(如*代表将前面的字符重复任意次). 元字符汇总 特殊字符 用途 . 匹配除换行符以外的任意单个 ...
- centos7之sed和awk常用
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令 ...
- sed & awk常用正则表达式
正则表达式元字符 正则表达式中有两种基本元素: 以字面值或变量表示的值(如.代表任意单个字符). 操作符(如*代表将前面的字符重复任意次). 元字符汇总 特殊字符 用途 . 匹配除换行符以外的任意单个 ...
- linux awk常用命令【转载】
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- awk常用命令
1.统计TCP的连接数量,其中LISTEN多少个,ESTABLISHED多少个. [root@heiniao ~]# netstat -ant Active Internet connections ...
- awk --- 常用技巧
一.每隔几行取出一个数,输出到另外一个文件 awk '{ if (NR % 9 ==1) {print NR, " => ", $0 } }' kp.txt > xy_ ...
随机推荐
- js中的数组去重
var str=["1","4","5","5","6","1","7 ...
- Java集合系列[3]----HashMap源码分析
前面我们已经分析了ArrayList和LinkedList这两个集合,我们知道ArrayList是基于数组实现的,LinkedList是基于链表实现的.它们各自有自己的优劣势,例如ArrayList在 ...
- Python3.5下安装&测试Scrapy
1.引言 Scrapy框架结构清晰,基于twisted的异步架构可以充分利用计算机资源,是做爬虫必备基础,本文将对Scrapy的安装作介绍. 2.安装lxml 2.1 下载地址:https://ww ...
- Flask-SQLAlchemy.........>model创建表
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarat ...
- backbone 要点知识整理
1.backbone 是个mvc的库,官方文档说它是个库,而不是个框架.库和框架的区别就是,库只是个工具,方便你的项目应用,不会改变你的项目结构,而框架会有一套自己的机制,项目需要遵循框架的设计来实现 ...
- 通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)
为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...
- codechef [snackdown2017 Onsite Final] Minimax
传送门 题目描述 考虑一个 N 行 N 列的网格,行列编号均为 1 ∼ N.每个格子中包含一个整数.记 ri 为第 i 行的最小值,Ci 为第 i 列的最大值.我们称一个网格为好的,当且仅当满足:$$ ...
- vijos 1110小胖邮递员;bzoj 1210: [HNOI2004]邮递员
Description Smith在P市的邮政局工作,他每天的工作是从邮局出发,到自己所管辖的所有邮筒取信件,然后带回邮局.他所管辖的邮筒非常巧地排成了一个m*n的点阵(点阵中的间距都是相等的).左上 ...
- SSH私用私钥登陆
1.导入私钥,将私钥文件放到当前登陆用户目录下的.ssh目录下 2.指定私钥登陆,ssh -i .ssh/ssh_rsa root@target.com 如果出现了下面这种情况 这是因为私钥文件权限 ...
- 复选框之checked属性
今天无意中看到同事在学习复选框里面的checked属性的应用,当时看了一下,感觉熟悉而又陌生,发现checked属性其实还是挺奇怪的,感觉这里很有必要做一下笔记: 1.html中的checked属性. ...