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)相关推荐

  1. linux下字符串处理工具二:awk( 二),awk脚本

    awk脚本 awk脚本是一个可执行的文件,常习惯以.awk命名. 结构: $test.awk #!/bin/awk -f #脚本系统中awk的位置BEGIN{} #脚本主体之前,执行些什么.该行内的语 ...

  2. linux下字符串查找 与替换

    1.在vi中使用的查找替换方法 利用 :s 命令可以实现字符串的替换.具体的用法包括: :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g ...

  3. linux下字符串处理工具一:grep

    grep常见选项 grep -A :显示匹配行和之后的几行 grep -A 4 "NullPointerException" test.log 找到NullPointerExcep ...

  4. linux下字符串操作,Linux Bash 中字符串操作

    所谓"子字符串"就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 test" 的子字符串. 我们有 ...

  5. linux 下nm命令输出,使用awk解析nm命令的输出 - Linux Bash

    这听起来这样从您的评论可能是你真正寻找: $ cat tst.awk { size = strtonum("0x"$1) sub(/^([^[:space:]]+[[:space: ...

  6. linux 按字符串分割文件 sed awk

    例如文件的内容是这样的: Please rise , then , for this minute ' s silence . ||| Please rise , then , for this mi ...

  7. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep

    0){ print line[var] v a r - - } } 此段程序读取一个文件的每一行,并用相反的顺序显示出来.我们使用NR作为数组的下标来存储文件的每一条记录,然后在从最后一条记录开始,将 ...

  8. Linux下的awk用法详解

    Linux下的awk用法详解 一.awk介绍 二.awk的语法 三.awk常见用法 四.awk其他用法 五.awk语言特性 一.awk介绍 1.AWK 是一种处理文本文件的语言,是一个强大的文本分析工 ...

  9. Redis基础,Linux下安装Redis和hredis,C++调用Redis,Redis中字符串设计

    文章目录 一.Redis是什么 Redis架构 Redis优势 Redis应用场景 二.Linux下载安装Redis(Ubuntu系统) 了解Redis版本 在线安装Redis 启动Redis服务端 ...

最新文章

  1. 史上最详细的RocketMq 下单支付案例 分享
  2. mysql引擎机制_关于MySQL中的InnoDB引擎的MVCC机制的理解
  3. 江苏c语言二级试题及答案,江苏省计算机二级C语言试题及答案.doc
  4. 深入浅出vc dll动态链接库
  5. 3D建模设计软件Rhino 7 for Mac
  6. 励志生活-英国式选秀带来的启示
  7. python3 linux
  8. 圈圈教你玩usb第一版件电子资源使用说明
  9. 【转】无线路由器密码破解
  10. 转专业到华侨大学计算机学院,关于2020年转专业工作安排的通知
  11. 100个最励志最科学的无敌成功法则
  12. MySQL:explain结果中Extra:Impossible WHERE noticed after reading const tables
  13. linux 编译器制作,Linux交叉編譯器的制作(一)
  14. js控制excel打印完美解决方案
  15. 数仓分层模型架构分享(2)
  16. 计算机图形学中消隐的相关概念及算法
  17. 二. 滤波器件选型学习笔记
  18. WinXP系统怎么重装?
  19. 微信支付:小程序支付/扫码支付
  20. 从DPU看未来网络架构的演进趋势

热门文章

  1. 模态框获取id一直不变,都是同一个id值
  2. window下java开发环境安装
  3. Android开源中国客户端学习 (自定义View)左右滑动控件ScrollLayout
  4. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)
  5. 这7个开源技术,支撑起整个互联网时代
  6. python标准库学习4
  7. mongoDB设置用户名密码的一个要点
  8. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素
  9. 特斯拉解锁对汽车电池容量的软件限制,以帮助用户逃离飓风危险
  10. 201621123057 《Java程序设计》第12周学习总结