awk 常用方法

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 }}‘

时间: 2024-10-10 14:15:05

awk 常用方法的相关文章

新awk整理

总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.awk工作流程三.awk程序结构四.awk基本语法 awk命令行模式 awk程序文件 awk标准选项五.awk内置变量 标准awk变量 awk特定变量(即专有变量)六.awk操作符 算数运算符 关系运算符 逻辑运算符 三元运算符 一元运算符 字符串连接操作符(即空格符) 数组成员操作符(in) 正则表

linux提取指定列字符并打印所有内容(awk)

假设有文件长如下样子: CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  samplename 1 3552841 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1 1 3552842 . T . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0

shell之awk

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理. 使用方法: awk [option] 'pattern1{action1}pattern2{action2}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令. awk

awk中使用shell变量

其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 这样要注意:在awk里,time不能加$符号. 网上说如下方法都可行: 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test&quo

awk 字符串处理函数

awk提供了许多强大的字符串函数,见下表:awk内置字符串函数gsub(r,s)    在整个$0中用s替代rgsub(r,s,t)    在整个t中用s替代rindex(s,t)    返回s中字符串t的第一位置length(s)    返回s长度match(s,r)    测试s是否包含匹配r的字符串split(s,a,fs)    在fs上将s分成序列asprint(fmt,exp)    返回经fmt格式化后的expsub(r,s)    用$0中最左边最长的子串代替ssubstr(s,

awk

cat 1.txt 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 行转列: awk '{for(i=1;i<=NF;i++)printf("%s\n",$i)};{printf "\n"}' 1.txt 显示如下: 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

Linux文本处理三剑客之GNU awk的使用

awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk(gawk) gawk –模式扫描和处理语言 基本用法: awk[options] 'program' var=value file- awk[options] -f programfile var=value file- awk[options] 'BEGIN{ action;... } pattern{ action;... } END{ acti

第4章 awk编程

1 awk编程模型       2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk程序段插入脚本文件后,然后通过awk命令调用它: awk -f awk脚本文件输入文件 将awk命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为: ./awk脚本文件输入文件 注:第二种方法脚本文件的首行不以#!/bin/awk –f开头:第三种方法脚本文件的