cat ./daily_uv/daily_uv_20140104 | awk '{fr[$1]+=$3; k=$1 "_" $2; av[k]+=$3;} END{for (k in fr) {print k,fr[k]} for (k in av) {print k,av[k]}}'

1.  最基本的用法

awk '{print $1}' ./daily_messageEnter_uv/daily_messageEnter_uv_20131226

即 awk '{*****}' filename

2.  awk的格式化输出,和C语言的printf没什么两样

如awk '{printf "%s %s", $1,$2}' ./filename

注意!!!

此时输出的效果与awk '{print $1}' 不同,1中的print会自动换行,但这里的printf如果不指定的话是连着输出的,输出方式:输出第一列的第一行,第二列的第一行,然后是第一列的第二行,第二列的第二行 ………………

如果希望换行,那么:加上\n

即awk '{printf "%s %s\n", $1,$2}' ./filename

也可以加上\t等

3.  过滤记录

awk '$1=="android" && $3>=10000 ' filename
输出  android 3.4.3 82256 65735
    android 3.2.1 10503 8540
    android 3.3.0 82071 66686
    android 3.4.0 18517 15031

此时四列满足条件的数据都将被输出(默认情况)

如果需要输出指定的数据需要使用前面提到的输出方法。

$ awk '$1=="android" && $3>=10000 {print $1,$2}  '  filename

此时可以总结这样的规律:awk的语句是写在'***' 中的,{**}中写输出的内容,语句中间没有符号,顺着向后写即可

注意!!!!

$1=="android" 这里的字符串需要用双引号

  3.1  输出行号

  awk '$1=="android" && $3>=10000 {print NR,$1,$2}’ filename

4.  指定分隔符

awk -F ’;‘ '{print NR,$1,$2}‘

-F可以指定分隔符,默认是Tab或是空格

  4.1  内建变量

  awk的一些内建变量:

$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

如果是多个分隔符可以写成

awk -F '[,;]'

指定输出分隔符 awk -F OFS="\t" '{print $1}'   filename

5.  字符串匹配

awk '$1 ~ /an.*|ipad/ {print $0}'    filename

‘|’符号的左右不要随意添加空格

awk '$1 ~ /an.*|ipad/ || NR==1 {print $0}'    filename

即输出表头

awk可以像grep一样的去匹配第一行,就像这样:

awk '/ipad/' filename

模式取反的例子:

awk '$1 !~ /an.*|ipad/ {print $0}'  filename


shell语句记录-awk的更多相关文章

  1. 常用的shell语句 【awk】去重,排列

    目的:从日志access.log中,筛选出IP来,并统计每个IP出现的次数,然后显示出来. 因为:awk = 扒IP  shot = 排序  uniq =  去重 所以:awk '{print $1} ...

  2. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  3. Linux记录-AWK语法(转载)

    1.原理 awk,一个行文本处理工具,逐行处理文件中的数据 语法:awk 'pattern + {action}' 说明:(1)单引号''是为了和shell命令区分开:(2)大括号{}表示一个命令分组 ...

  4. 转shell中的awk用法详解

        awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 调用awk:   第一种,命令行方式 ...

  5. Bash shell命令记录和CentOS的一些技巧

    ①CentOS的实用技巧: 一.按下ctrl+alt+F2可由图形界面切换至命令行(shell窗口),按下ctrl+alt+F1可由命令行切换至图形界面(前提是安装CentOS时软件选择项选择安装了图 ...

  6. awk循环语句-【AWK学习之旅】

      AWK中两种循环语句:if-else 和 while   控制流语句: 1.if-else 求总数,平均值: [root@monitor awkdir]# awk '$3>6 {n = n ...

  7. shell 强大的awk

    from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort ...

  8. shell下的 awk/sed/grep/seq/tr

    转自:实例手册 https://github.com/liquanzhou/ops_doc/blob/master/shell%E5%AE%9E%E4%BE%8B%E6%89%8B%E5%86%8C. ...

  9. linux shell学习记录

    1.shell脚本开始以 #! /usr/bin 这个叫做Shebang 这个指定解释器的路径 2.shell 一些配置在~/.bashrc中,运行的历史shell命令在~/.bash_history ...

随机推荐

  1. Uubuntu 14.04 LTS反编译apk

    使用apktool反编译apk 1.安装apktool apktool是Google提供的APK编译工具,能够反编译及回编译apk,需要Java环境的支持(在此不再赘述Java的安装与配置,详见< ...

  2. python列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  3. WCF约束名称的用法

    <!--<endpoint address="" binding="basicHttpBinding" bindingConfiguration=& ...

  4. R语言数据类型转换

    test for data type is.numeric(), is.character(), is.vector(), is.matrix(), is.data.frame() convert i ...

  5. opencv实现KNN手写数字的识别

    人工智能是当下很热门的话题,手写识别是一个典型的应用.为了进一步了解这个领域,我阅读了大量的论文,并借助opencv完成了对28x28的数字图片(预处理后的二值图像)的识别任务. 预处理一张图片: 首 ...

  6. UESTC 1074 秋实大哥搞算数 栈模拟

    秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  7. 51nod1586 约数和

    果然我自己写的读入优化naive!...换题目给的读入优化就A了...话说用visual交快了好多啊... const int BufferSize=1<<16; char buffer[ ...

  8. poj 1195 mobile phone

    题目连接: 题意:要求设计这样一个数据结构,支持下列操作 1.add(x,y,a).对二维数组的第x行,第y列加上a. 2.sum(l,b,r,t).求所有满足l<=x<=r,b<= ...

  9. Asp.Net使用代理IP远程获取数据

    /// <summary> /// 远程获取数据 /// </summary> /// <param name="url">url</pa ...

  10. LA 3516 Exploring Pyramids (记忆化搜索)

    题意 给定一个DFS序列,问能有多少树与之对应. 思路 设输入序列为S,dp(i, j)为子序列Si, Si+1, --, Sj对应的树的个数,则边界条件为d(i, i) = 1,且Si != Sj时 ...