文本处理工具awk基础用法

sed是以行为单位的文本处理工具,awk则以列为单位。

文件都是结构化的,都是有单词和空白字符组成的。

空白字符包括空格、tab以及连续的空格和tab。每个非空白部分叫做域, $0表示 全部域, $1表示第1个域等等……

默认以空白字符为分隔符,打印前两列

[email protected]:~/templates$ cat data.txt
a.wang  Male  30  021-11111111
b.yang  Female  25  021-22222222
c.liu Male  33  021-33333333
d.gong  Female  24  021-44444444

[email protected]:~/templates$ awk ‘{print $1,$2}‘ data.txt
a.wang Male
b.yang Female
c.liu Male
d.gong Female

-F指定其他分割符,打印前两列

[email protected]:~/templates$ awk -F. ‘{print $1,$2}‘ data.txt
a wang  Male  30  021-11111111
b yang  Female  25  021-22222222
c liu Male  33  021-33333333
d gong  Female  24  021-44444444

内部变量NF表示每行有多少域

[email protected]:~/templates$ awk ‘{print NF}‘ data.txt
4
4
4
4

同理,{print $NF}可以打印最后一个域,{print $NF-1}打印倒数第二域

截取字符串:substr(指定域, 子串开始位置, 子串结束位置)。不写子串结束位置表示到末尾

内部变量length表示当前行的长度

[email protected]:~/templates$ cat data.txt | awk ‘{print substr($1,3)}‘
wang
yang
liu
gong
[email protected]:~/templates$ cat data.txt | awk ‘{print substr($1,3)}‘ | awk ‘{print $NF,length}‘
wang 4
yang 4
liu 3
gong 4

求数字列之和,并打印

[email protected]:~/templates$ cat data.txt | awk ‘BEGIN{total=0}{total+=$3} END {print total}‘
112

# total/行数
[email protected]:~/templates$ cat data.txt | awk ‘BEGIN{total=0}{total+=$3}END{print total/NR}‘
28

输出行号

[email protected]:~/templates$ cat data1.txt
a wang  Male  30  021-11111111
b yang  Female  25  021-22222222
c liu Male  33  021-33333333

[email protected]:~/templates$ cat data1.txt | awk ‘BEGIN{total=0}{total+=$3}END{print NF,NR}‘
4 3

[email protected]:~/templates$ cat data1.txt | awk ‘{print NF,NR}‘
4 1
4 2
4 3

实战问题 1

文本中有多行数据,每一行可能有keyword,找出包含keyword的连续两行行号

假设内容如下

[email protected]:~/tmp$ cat meitu.txt
abc
66 kw
kw 4
d x
gdas
dsafd
ddd34
qq2

dtttt
kw3 kw kw
666666666666

kw
kw
theend

grep可以查到包含关键字kw的行

[email protected]ubuntu:~/tmp$ grep kw meitu.txt -n
2:66 kw
3:kw 4
11:kw3 kw kw
14:kw
15:kw

如何查找连续两行行号?

可以编写脚本ctrow.sh,利用awk获取行号列,然后判断上一个kw所在行和当前kw所在行是否相差1

#!/bin/bash
pre=-100 # 上一个行号
for i in `grep kw meitu.txt -n | awk -F: ‘{print $1}‘`
do
  if [ $((pre+1)) -eq $i ];
  then
      echo $i
  fi
  pre=$i
done

运行下:

[email protected]:~/tmp$ sh ctrow.sh
3
15

References

  1. 王军. Linux系统命令及Shell脚本实践指南
时间: 2024-10-14 15:56:28

文本处理工具awk基础用法的相关文章

linux之文本处理工具awk

文本处理工具awk用法(介绍在最后) awk -v FS=: '{print $1,FS,$3}' /etc/passwd {FS}可省略 awk -v FS=: -v OFS=^^^ '{print $1,$3}' /etc/passwd awk -F: -v OFS=^^^ '{print $1,$3}' /etc/passwd awk -F: '{print $1,$NF}' /etc/passwd ls /media/cdrom/Packages/ | awk -F"." '{

Linux文本处理工具AWK使用解析

在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk. awk  option  'pattern'  file -F    指定分隔符: -v     申明自定义变量: 查看当前系统上,用户名和用户shell,输出分隔符为~. # awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end===

Linux命令:文本处理工具awk详解一

awk命令简介: awk是一个强大的文本分析工具,通常,awk是以文件的每一行,为处理单位的.awk每接收文件的一行,然后执行相应的命令,来处理文本.  1.命令格式: awk 'pattern {action}'{filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所 执行的一系列命令.花括号({})不需要在程序中始终出现,但它们用于根据特定的 模式对一系列指令进行分组. pattern就是要表示的正则表达式,用斜杠括起来. 调用a

性能测试日志分析之awk基础用法

转发自:微信公众号"测试那点事儿 "的文章 我们做性能测试的时候要进行一些日志分析,最简单的可以用awk命令进行分析. awk awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理.而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志. 简单来说,awk就是用一个循环实现的.首先awk读取文本的一行(默认是从第一行开始,当然也可以根据条件选择行),然后根据你给的条件来处理这行的某个字段:处理完成后,再读取下一行,

日志分析命令awk基础用法

awk awk是一个很好用的文本处理工具,相对于sed常用用作一整行的处理,awk则比较擅长将一行分成数个字段来处理.而在我们性能测试中,可以awk可以帮助我们造数,也可以帮助我们分析日志. 简单来说,awk就是用一个循环实现的.首先awk读取文本的一行(默认是从第一行开始,淡然也可以根据条件选择行),然后根据你给的条件来处理这行的某个字段:处理完成后,再读取下一行,然后再根据条件去处理字段,直到处理完成所有的行. awk的标准格式 awk '条件类型1{动作1} 条件类型2{动作2}.....

Linux文本处理三剑客——awk详细用法

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息.awk处理过程: 依次对每一行进行处理,然后输出 . awk命令形式:awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file [-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符 E

文本处理工具---AWK

AWK简介 awk是一个强大的报告生成工具,它可以根据我们输入的信息,将其格式化以后显示在屏幕上.所谓格式化就是根据我们自定义的格式将所需要的信息比较美观的显示出来.awk最初是在1977年完成的,后来又发表了一个比之前功能更加强大的awk,叫做nwak或gawk.nawk是工作在windows操作系统下的,而gawk是GNU组织开发的.他用于linux/unix系统下的.在RHEL 5.8中,awk是gawk的软链接文件.其实awk也是一门编程语言,它也支持多种控制语句,例如:if...els

awk基础用法

awk是神通广大的工具,不学一下的话,shell脚本写起来真的好艰难... awk有很多不同的版本,这里采用的是gawk(依我看,功能都差不多),它用来检索一些文件,从中找出匹配指定模式的行,然后在这些行上执行指定的动作. 基本格式如下: gwak options 'pattern {action}' file-list 其中,file-list是gawk的数据来源:options是一些特定的选项:主要部分"模式+动作"必须要放在单引号内,而且动作还要用花括号括起来.主要部分如果太多的

文本处理工具awk

目录 awk:(Aho, Weinberger, Kernighan,)报告生成器,格式化文本输出 gawk:模式扫描和处理语言 awk语言 awk工作原理 print awk变量 自定义变量 printf命令 awk操作符 awk的条件判断 awk的循环 awk的数组 awk的函数 awk调?系统命令和其他功能 awk:(Aho, Weinberger, Kernighan,)报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk( gawk) @ gawk:模式扫