awk

(5)awk划分字段的3种方式

时间秒杀一切 提交于 2020-03-01 13:45:28
详细分析awk字段分割 awk读取每一条记录之后,会将其赋值给 $0 ,同时还会对这条记录按照 预定义变量FS 划分字段,将划分好的各个字段分别赋值给 $1 $2 $3 $4...$N ,同时将划分的字段数量赋值给 预定义变量NF 。 引用字段的方式 $N引用字段: N=0:即$0,引用记录本身 0<N<=NF:引用对应字段 N>NF:表示引用不存在的字段,返回空字符串 N<0:报错 可使用变量或计算的方式指定要获取的字段序号。 [root@docker-01 ~]# awk '{n = 5;print $n}' a.txt email abc@qq.com def@gmail.com aaa@163.com bbb@189.com ccc@xyz.com ddd@139.com exdsa@189.com bax@qq.com bc@sohu.com bcbd@139.com [root@docker-01 ~]# awk '{print $(2+2)}' a.txt # 括号必不可少,用于改变优先级 age 28 24 21 21 18 22 25 20 23 27 [root@docker-01 ~]# awk '{print $(NF-3)}' a.txt gender male female male male male female female male female

使用awk的二维数组解决一个日志统计的实际问题

独自空忆成欢 提交于 2020-03-01 13:40:34
项目中遇到的一个实际问题,日志如下 2013-09-13 00:06:09:adid:10000254 2013-09-13 00:06:14:adid:10000254 2013-09-13 00:06:43:adid:10000253 2013-09-13 00:06:48:adid:10000254 2013-09-13 00:07:07:adid:10000254 2013-09-13 00:07:12:adid:10000254 2013-09-13 00:07:19:adid:10000254 2013-09-13 00:07:32:adid:10000254 2013-09-13 00:08:05:adid:10000254 2013-09-13 00:08:20:adid:10000240 2013-09-13 00:08:28:adid:10000253 2013-09-13 00:08:32:adid:10000253 2013-09-13 00:08:41:adid:10000254 2013-09-13 00:09:02:adid:10000253 2013-09-13 00:09:10:adid:10000254 2013-09-13 00:09:11:adid:10000240 2013-09-13 00:09:18:adid:10000254 2013

(4)awk读取行的细节

一世执手 提交于 2020-03-01 13:25:56
详细分析awk如何读取文件 awk读取输入文件时,每次读取一条记录(record)(默认情况下按行读取,所以此时记录就是行)。每读取一条记录,将其保存到 $0 中,然后执行一次main代码段。 [root@docker-01 ~]# awk '{print $0}' a.txt 如果是空文件,则因为无法读取到任何一条记录,将导致直接关闭文件,而不会进入main代码段。 [root@docker-01 ~]# touch x.log [root@docker-01 ~]# awk '{print $0}' x.log 可设置表示输入记录分隔符的预定义变量RS(Record Separator)来改变每次读取的记录模式。 # RS="\n" 、 RS="m" [root@docker-01 ~]# awk 'BEGIN{RS="\n"}{print $0}' a.txt ID name gender age email phone 1 Bob male 28 abc@qq.com 18023394012 2 Alice female 24 def@gmail.com 18084925203 3 Tony male 21 aaa@163.com 17048792503 4 Kevin male 21 bbb@189.com 17023929033 5 Alex male 18 ccc

如何使用 awk 的 ‘next’ 命令

余生颓废 提交于 2020-02-29 12:56:53
要明白它是如何工作的, 让我们来分析一下 food_list.txt 它看起来像这样: Food List Items No Item_Name Price Quantity 1 Mangoes $3.45 5 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 6 Bananas $3.45 30 > 运行下面的命令,它将在每个食物数量小于或者等于 20 的行后面标一个星号: # awk '$4 <= 20 { printf "%s/t%s/n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt No Item_Name Price Quantity 1 Mangoes $3.45 5 * 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 * 6 Bananas $3.45 30 上面的命令实际运行如下: 1.它用$4 <= 20表达式检查每个输入行的第四列(数量(Quantity))是否小于或者等于 20,如果满足条件,它将在末尾打一个星号 (*)。 2.它用$4 > 20表达式检查每个输入行的第四列是否大于20

linux实战(一)----日志的截取-----文本过滤器grep、文本流式编辑器sed、报表生成器awk的运用

不羁的心 提交于 2020-02-28 21:47:55
linux实战(一)----日志的截取-----文本过滤器grep、文本流式编辑器sed、报表生成器awk的运用 2015年12月25日 16:28:50 张小凡vip 阅读数 5404更多 所属专栏: linux基础与shell编程 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/50394765 我们前面已经学习过 linux的性能查询(top),以及网络端口查询(netstat)命令等等。 怎么让我们查询到的信息按 我们需要的格式 显示生成。 就是我们本章 需要 学习练习的。 主要是grep,sed,awk3个命令的运用。 grep主要负责搜索 sed主要负责处理行 awk主要复杂处理列 我们在下一章的内容再来学习实例,如果用这几个命令来进行性能监控等。 grep 作用 grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。 grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 格式 grep [options] [options]主要参数: -c:只输出匹配行的计数。 -I:不区分大小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l

全局替换由crontab起的shell脚本中的某些字符串

久未见 提交于 2020-02-28 21:26:37
遇到这样一个需求: 需要替换crontab起的shell脚本中的某个域名,但是不知道crontab中到底有多少的shell脚本包含被替换的域名,难道要手工去查找么?于是写了个脚本,并通用之 功能:替换crontab中的shell脚本的某个字符串为另外一个,用法: Usage : sh replaceCronScript.sh src="string1" dst="string2" Example: sh replaceCronScript.sh src=clicklog.dtc.log.sz.com dst=soso1_0.dtc.log.sz.com #! /bin/bash ##################################################### #name : replaceCronScript.sh #note : replace some crontab shell scripts's # : string with new string #date : 2012.12.27 #author : <peterguo@vip.qq.com> #################################################### if [ $# -eq 0 ]; then echo "Usage : sh $

awk(gawk)

佐手、 提交于 2020-02-28 08:45:21
  awk,逐行处理文本内容。Linux里的awk其实是“gawk”。   使用格式:     awk [选项] '模式匹配 {命令 命令参数}' file1, file2, …… 支持的选项 说明 -f program-file --file program-file 从文件接收 awk指令,可以同时指定多个文件 -F fs --field-separator fs 指定(fs)列分隔符 -v var=value --assign var=value 为 BEGIN 块定义变量var,指定其值为value -d[file] --dump-variables[=file]   demo,ipaddress俩文件的内容是环网柜、柱上开关柜的主、备ip地址。分别以制表符、冒号分割。 $ cat demo RingNetwork 181.36.1.8 182.36.4.8 Switch 181.32.1.22 182.36.4.42 Switch 181.32.1.23 182.36.4.43 $ cat ipaddress R:181.36.1.8:182.36.4.8 S:181.32.1.22:182.36.4.42 S:181.32.1.23:182.36.4.43   命令:     print 打印输出,参数之间使用逗号分隔。      printf 输出时,需要指定输出格式

20条有用的AWK 单行语句

我们两清 提交于 2020-02-27 23:18:37
20条有用的AWK 单行语句 1、END {print NR} #输出总行数 2、NR == 10 #输出第十行 3、{ print $NF } #输出最后一列 4、{ field = $NF} END { print field } #输出最后一行的最后一列 5、NF > 4 #输出input line中所有多过4列的行(这个没有在action中,所以是过滤功能) 6、$NF > 4 #输出input line中所有最后一列的值大于4的行,也是过滤 7、{ nf = nf + NF } END { print nf } #input line的所有累加总的fields 8、/Beth/ { nlines = nlines + 1 } END { print nlines } #含有Beth这个单词的总行数 9、$1 > max { max = $1; maxline = $0 } END {print max, maxline } #输出第一列最大的行 10、NF > 0 #field输出非空的行 11、length($0) > 80 #过滤出整行的长度超过80的行 12、{ print NF, $0 } #在行前面输出本行有多少列 13、{ print $2, $1 } #输出每一行的第二列,空格,第一列 14、{ temp = $1; $1 = $2; $2 = temp;

文本处理 awk

微笑、不失礼 提交于 2020-02-27 08:46:59
======================================================== 一、awk简介 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个 或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix 下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。 awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定 模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出( 屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字 母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的 GNU版本,它提供了Bell实验室和GNU的一些扩展。 二、awk的两种形式语法格式 awk [options] 'commands' filenames awk [options] -f awk-script-file filenames ==options: -F 定义输入字段分隔符,默认的分隔符是空格或制表符(tab) ==command: BEGIN{} {} END{}

文本处理工具awk常用命令

心不动则不痛 提交于 2020-02-26 02:38:45
awk 其实是一门编程语言,它,支持条件判断、数组、循环等功能,我们可以把它理解成一个脚本语言解释器 它与grep、sed被linux称为"三剑客" 每个都有它的特长 grep 更适合单纯的去查找或者匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式处理 一、AWK基础 awk的基本用法 格式 awk 动作 文件名/文件名/awk/动作 如果不指定任何参数直接使用awk 格式是这样的 awk '{print}' 文件 直接回输出整个文件,相当于shell中的cat命令 示例 [root@zhaocheng ~]# awk '{print}' echo.sh #!/bin/bash echo "shucai"\b"niunai" 取free -m文件的第3列,这样取的话,我们可以直接去使用free -m 先让它输出,然后通过管道再去取它的第三列,像取第三列的话,其实中间还是有分隔符的,也就是空格,不指定分隔符,默认将空格作为分隔符了 [root@zhaocheng ~]# free -m |awk '{print $3}' free 115 0 也可以去取多个列,以,分开,比如还是取free -m,取它的第2,3,4列 [root@zhaocheng ~]# free -m |awk '{print $2,$3,$4}' used free