linux下字符串处理工具二:awk(1)
awk工作原理
原理图
第一步:awk对文件或管道的内容一次只处理一次,将获取到的这一行赋给内部变量$0。
第二步:这一行的内容按awk内部变量FS定义的分隔符,缺省为空格(包括tab制表符)分解成字段,每一段存储在从$1开始的变量中。
第三步:awk中print命令打印字段;{print $1,$3} 只取有用的第一段和第三段;在打印时$1和$3之间由空格间隔。“,”逗号是一个映射到内部的输出字段分隔符(OFS),OFS变量缺省为空格,逗号在输出时被空格替换。接下来,awk处理下一行数据,直到所有的行处理完。
例子:
截取部分/etc/passwd的内容在5.txt 中作为例子
➜ awkstudy cat 5.txt
_spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false
_tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false
_securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false
_calendar:*:93:93:Calendar:/var/empty:/usr/bin/false
_teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false
打印所有的5.txt的内容
awk '{print $0}' 5.txt 或者
awk '{print}' 5.txt
代码块 {print} 单独出现的时候,会打印一整行的东西={print $0}
awk '{print ""}' 5.txt
会打印出与5.txt中行数相等的空行
awk '{print "hello"}' 5.txt
会打印出与5.txt行数相等的hello
基本示例
入门例子
awk -F":" '{print $1,$4}' 5.txt
_spotlight 89
_tokend 91
_securityagent 92
_calendar 93
_teamsserver 94
awk -F":" '{print $1 $4}' 5.txt
_spotlight89
_tokend91
_securityagent92
_calendar93
_teamsserver94
awk -F":" '{ print "username: " $1 "\t\tuid:" $3 }' 5.txt
username: _spotlight uid:89
username: _tokend uid:91
username: _securityagent uid:92
username: _calendar uid:93
username: _teamsserver uid:94
awk内建变量
用法示例
设置字段分隔符号(FS使用方法)
awk 'BEGIN{FS=":"}{print NR,$1,$NF}' 5.txt
或者:
awk -F":" '{print NR,$1,$NF}' 5.txt
记录条数(NR,FNR使用方法)
awk -F":" '{print NR,$1,$NF}' /etc/passwd
设置输出字段分隔符(OFS使用方法)
awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
12^^root^^/bin/sh
设置输出行记录分隔符(ORS使用方法)
awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' 5.txt
输入参数获取(ARGC ,ARGV使用)
awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' 5.txtARGC=2
0=awk
1=5.txt
获得linux环境变量(ENVIRON使用)
awk 'BEGIN{print ENVIRON["PATH"];}'
/Users/enyilr/.jenv/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin:/Users/enyilr/javatools/apache-maven-3.3.3/bin:/Users/enyilr/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
ENVIRON是子典型数组,可以通过对应键值获得它的值。
RSTART RLENGTH使用
awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
11 11 4
awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 -1
RSTART 被匹配正则表达式首的位置,RLENGTH匹配字符长度,没有找到为-1.
参考:https://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/
linux下字符串处理工具二:awk(1)相关推荐
- linux下字符串处理工具二:awk( 二),awk脚本
awk脚本 awk脚本是一个可执行的文件,常习惯以.awk命名. 结构: $test.awk #!/bin/awk -f #脚本系统中awk的位置BEGIN{} #脚本主体之前,执行些什么.该行内的语 ...
- linux下字符串查找 与替换
1.在vi中使用的查找替换方法 利用 :s 命令可以实现字符串的替换.具体的用法包括: :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g ...
- linux下字符串处理工具一:grep
grep常见选项 grep -A :显示匹配行和之后的几行 grep -A 4 "NullPointerException" test.log 找到NullPointerExcep ...
- linux下字符串操作,Linux Bash 中字符串操作
所谓"子字符串"就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有 ...
- linux 下nm命令输出,使用awk解析nm命令的输出 - Linux Bash
这听起来这样从您的评论可能是你真正寻找: $ cat tst.awk { size = strtonum("0x"$1) sub(/^([^[:space:]]+[[:space: ...
- linux 按字符串分割文件 sed awk
例如文件的内容是这样的: Please rise , then , for this minute ' s silence . ||| Please rise , then , for this mi ...
- linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
0){ print line[var] v a r - - } } 此段程序读取一个文件的每一行,并用相反的顺序显示出来.我们使用NR作为数组的下标来存储文件的每一条记录,然后在从最后一条记录开始,将 ...
- Linux下的awk用法详解
Linux下的awk用法详解 一.awk介绍 二.awk的语法 三.awk常见用法 四.awk其他用法 五.awk语言特性 一.awk介绍 1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工 ...
- Redis基础,Linux下安装Redis和hredis,C++调用Redis,Redis中字符串设计
文章目录 一.Redis是什么 Redis架构 Redis优势 Redis应用场景 二.Linux下载安装Redis(Ubuntu系统) 了解Redis版本 在线安装Redis 启动Redis服务端 ...
最新文章
- 史上最详细的RocketMq 下单支付案例 分享
- mysql引擎机制_关于MySQL中的InnoDB引擎的MVCC机制的理解
- 江苏c语言二级试题及答案,江苏省计算机二级C语言试题及答案.doc
- 深入浅出vc dll动态链接库
- 3D建模设计软件Rhino 7 for Mac
- 励志生活-英国式选秀带来的启示
- python3 linux
- 圈圈教你玩usb第一版件电子资源使用说明
- 【转】无线路由器密码破解
- 转专业到华侨大学计算机学院,关于2020年转专业工作安排的通知
- 100个最励志最科学的无敌成功法则
- MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables
- linux 编译器制作,Linux交叉編譯器的制作(一)
- js控制excel打印完美解决方案
- 数仓分层模型架构分享(2)
- 计算机图形学中消隐的相关概念及算法
- 二. 滤波器件选型学习笔记
- WinXP系统怎么重装?
- 微信支付:小程序支付/扫码支付
- 从DPU看未来网络架构的演进趋势
热门文章
- 模态框获取id一直不变,都是同一个id值
- window下java开发环境安装
- Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)
- 这7个开源技术,支撑起整个互联网时代
- python标准库学习4
- mongoDB设置用户名密码的一个要点
- 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素
- 特斯拉解锁对汽车电池容量的软件限制,以帮助用户逃离飓风危险
- 201621123057 《Java程序设计》第12周学习总结