文档章节

awk 常用方法

 惊浪
发布于 2015/02/10 16:13
字数 396
阅读 126
收藏 16

1、字符替换

echo "a b c 2011-11-22 a:d" | awk '{gsub(/[ab]/,"",$0);print $0}' 使用正则语法把a或b字符替换成空字符

$0指取当前行作为字符串处理 ,awk命令默认使用空格字符分隔处理

注意gsub的返回结果是 替换次数,  $0被替换完后还是存放在$0中,下一命令行print可以取正确结果

2、字符分隔

dstat| awk -F "[ |]+" 使用正则语法分隔处理行,把空格或|字符都当前当前行处理

3、日期打印

echo "a b c 2011-11-22 a:d" | awk '{print strftime("%y-%m-%d %T",systime());}'

输出结果为15-02-10 16:02:19,systime()为取系统当前时间,有或没有结果都一样,strftime()默认取当前时间

4、if else

dstat| awk -F "[ |]+" '{if(match($10, "M")>=1){gsub(/[MkB]/,"",$10);recv+=$10;}else if(match($10, "k")>=1){gsub(/[MkB]/,"",$10);recv+=$10/1024;}; print recv}'

match为匹配字符串是否出现

5、命令换行 使用\,与C++语法一样

#!/bin/bash
dstat| awk -F "[ |]+" 'BEGIN{max=0;count=0;curr=300}{ \
if(match($0, "total")<=1 && match($0, "idl")<=1){count++;sysc+=$1+$2;max=(($1+$2) >max ?($1+$2):max);\
if(match($10, "M")>=1){gsub(/[MkB]/,"",$10);recv+=$10;}else if(match($10, "k")>=1){gsub(/[MkB]/,"",$10);recv+=$10/1024;} \
if(match($11, "M")>=1){gsub(/[MkB]/,"",$11);send+=$11;}else if(match($11, "k")>=1){gsub(/[MkB]/,"",$11);send+=$11/1024;} \
};if(count%curr==0){ \
{now=strftime("%y-%m-%d %T",systime());}{print now,"sysc=",sysc/curr,"Max=",max,"recv=",recv/curr,"send=",send/curr >> "/usr/local/nds/log/dstat2015.log";fflush(stdout)};sysc=0;max=0;recv=0;send=0 }}'

© 著作权归作者所有

共有 人打赏支持
粉丝 16
博文 29
码字总数 17864
作品 0
福州
程序员
如何使用 awk 和正则表达式过滤文本或文件中的字符串

当我们在 Unix/Linux 下使用特定的命令从字符串或文件中读取或编辑文本时,我们经常需要过滤输出以得到感兴趣的部分。这时正则表达式就派上用场了。 什么是正则表达式? 正则表达式可以定义为...

开元中国2015
2016/07/19
48
0
linux取IP地址的多种方法

对于很多linux初学者,还有很多基础面试时,都会可能遇到需要提取IP地址的问题,下面我总结了多种取IP址的方法,希望大家能学到知识 如下图,我需要提取出eth0的IP地址 方法一:使用awk实现 ...

街角守望妳
2017/03/16
0
0
grep、sed、awk和正则表达式

grep SYNOPSIS 常用选项 -A 显示改行和改行后的内容-B 显示改行和改行前的内容-C 显示该行和改行前后的内容-R/-r 递归,匹配目录-d 对指定目录进行相应的操作,read:读取目录下所有文件,r...

yr_linux运维
2017/12/26
0
0
awk学习笔记

awk的工作流程: 将文件的一行读到内存,然后按分隔符将该行进行分段,其默认的分隔符是空格和TAB。 常用格式1: awk /pattern/ {command1;command2.....} file 用法1 指定分隔符 用-F'分隔符...

香胖
2015/12/04
47
0
五年屌丝运维工作shell精华

屌丝运维常用shell 列出你最常用的10条shell history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head history | awk '{a[$4]++}END{for(i in a){print a[$i] " " i......

a591244761
2014/07/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
6
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
43
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部