转载自:http://blog.chinaunix.net/uid-23302288-id-3785105.html

感谢作者大大pspery

awk是行处理器:

相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。

awk处理过程:

依次对每一行进行处理,然后输出。

awk命令形式:

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

[-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value

'  '          引用代码块

BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

//           匹配代码块,可以是字符串或正则表达式

{}           命令代码块,包含一条或多条命令

;          多条命令使用分号分隔

END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

特殊要点:

$0      表示整个当前行

$1      每行第一个字段

NF     字段数量变量

NR     每行的记录号,多文件记录递增

FNR  与NR相似,不过多文件记录不递增,每个文件都从1开始

\t        制表符

\n       换行符

FS     begin时定义分隔符

RS     输入的记录分隔符,默认为换行符(即文本是按照一行一行输入)

~        匹配,与==相比不是精确比较

!~       不匹配,不精确比较

==       等于,必须全部相等,精确比较

!=        不等于,精确比较

&&       逻辑与

||          逻辑或

+         匹配时表示一个或一个以上

/[0-9][0-9]+/     两个或两个以上数字

/[0-9][0-9]*/      一个或一个以上数字

FILENAME      文件名

OFS     输出字段分隔符,默认也是空格,可以改为制表符等

ORS     输出的记录分隔符

-F'[:#/]'   定义三个分隔符

打印

print是awk打印指定内容的主要命令。

awk '{print}' file    输出文件内容

awk '{print $0}'  file  输出文件内容

awk '{print ""}'  file    读取file的行数N,然后输出N行空格

awk '{print "a"}' /etc/passwd    读取file的行数N,然后输出N行a

awk -F" " '{print $1}' file     读取file的内容,用分隔符空格匹配,输出每行匹配到的第一个字段

awk -F" " '{print $1;print $2}' file     读取file的内容,用分隔符空格匹配,分行输出每行匹配到的前两个字段

awk -F" " '{print $1;print $2}' file     读取file的内容,用分隔符空格匹配,输出每行匹配到的前两个字段,以制表符作为分割

-f 指定脚本文件

BEGIN{

FS=" "
}

{print $1}

等同于awk -F" " '{print $1}' file

awk  'BEGIN{X=0} /^$/{ X+=1 } END{print "I find",X,"blank lines."}' file    输出空白行

ls -l| awk 'BEGIN{SUM=0}!/^d/{SUM+=$5} END{print "ths total size is ",SUM}'  计算文件总大小

-F指定分隔符

awk -F" " '{print $1}' file     读取file的内容,用分隔符空格匹配,输出每行匹配到的第一个字段

awk -F" " '{print $1 $3}' file     读取file的内容,用分隔符空格匹配,输出每行匹配到的第一个及第三个字段,相连输出

awk -F" " '{print $1,$3}' file     读取file的内容,用分隔符空格匹配,输出每行匹配到的第一个及第三个字段,空格连接输出

awk -F" " '{print "firstword:"$1 "\t\tthirdword:" $3}' file    自定义格式化输出

awk -F" " '{print NF}' file    打印每行有多少字段

awk -F" " '{print $NF}'  file   打印每行第NF个字段

awk '{print NR}' file   打印行号

awk -F" " '{print NR,NF,$NF,'\t',$0}' file    依次打印 行号,字段数,最后一个字段,制表符,整行内容

匹配代码块

//纯字符匹配   !//纯字符不匹配   ~//字段值匹配    !~//字段值不匹配   ~/a1|a2/字段值匹配a1或a2 

awk '/name/' file

awk '/name/{print}' file

awk '/name/{print $0}' file     此三条命令结果一致,匹配含有name的行

上述三条命令/name/变为!/name/,则匹配不包含name的行

awk '/miaomiao|wangwang/' file   可用|进行或运算,匹配miaomiao或wangwang,同样加!表示匹配不包含的行

awk -F" "  '/miaomiao/,/wangwang/' file   匹配包含喵喵及旺旺的整个区间

awk -F“ ” '$1~/my/{print $1}' file    第一个字段为my时,显示第一个字段

加!表示第一个字段不为my时。

if语句

if必须要用在{}中,且内容要用()括起来。

awk -F" " '{if($1~/my/) print $1}' file     如果第一个字段为my则输出

awk -F" " '{if($1~/my/) {print $1} else {print $2}}' file     如果第一个字段为my则输出,否则输出第二个字段

awk -F" " '{if($1~/my/) next; else {print $0}}' file   如果匹配到my则跳过,否则输出整行。

while循环

awk 'BEGIN{i=1}{while(i<NF) print NF,i++}' file    i=1,当i<=NF时,输出NF,i,然后i+1,直到i>NF,退出循环

条件表达式

==   !=   >   >=   <   <=

准备文件

依次运用上述符号

逻辑运算符

&&    ||

awk -F" " '$1~/my/ && $5~/miaomiao/ {print $0}' file     匹配第一个字段为my且第五个字段为miaomiao的,输出整句

awk -F" " '$1~/my/ || $5~/miaomiao/ {print $0}' file        匹配第一个字段为my或第五个字段为miaomiao的,输出整句

数值运算

加,减,乘,除,取整


输出处理结果到文件

在命令代码块中直接输出

使用重定向进行输出

格式化输出

netstat -anp|awk '{printf "%-8s %-8s %-10s\n",$1,$2,$3}'

printf表示格式输出

%格式化输出分隔符

-8长度为8个字符

s表示字符串类型

打印每行前三个字段,指定第一个字段输出字符串类型(长度为8),第二个字段输出字符串类型(长度为8),

第三个字段输出字符串类型(长度为10)

数组

netstat -anp|awk 'NR!=1{a[$6]++} END{for (i in a) print i,"\t",a[i]}'

shell02:必须要会的辅助(awk)相关推荐

  1. shell --- awk规范 系统总结

    文章目录 awk和sed的区别 awk脚本的流程控制 awk 记录和字段 字段的引用 awk表达式 赋值操作符 算数操作符 系统变量(awk本身自定义的系统变量) 关系操作符 布尔操作符 awk 条件 ...

  2. linux文本分析工具awk解读

    awk是一个强大的文本分析工具,相对于grep的查找.sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. ...

  3. 文本替换sed+字段处理cut,join+awk重新编排字段

    [1]sed工具(Stream Editor)--流编辑器 sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.截取特 ...

  4. 在Linux里awk与sed的区别,linux awk和sed讲解

    sed 工具简介 在了解了一些正规表示法的基础应用之后,再来呢?呵呵-两个东西可以玩一玩的,那就是 sed 跟 awk 了! 这两个家伙可是相当的有用的啊!举例来说,鸟哥写的 logfile.sh 分 ...

  5. 白话编程辅助工具perl2exe(Reship)

    白话编程辅助工具perl2exe 白话编程辅助工具perl2exe 作者:FireFox    文章来源:火狐技术联盟    点击数: 243    更新时间:2005-2-6 想不想门槛低一点的跨入 ...

  6. 活跃了 40 年的 AWK 现在怎么样了?

    [CSDN编者按]AWK是一种文本处理语言,距今已经历了40多年的发展.它支持POSIX标准,有几种符合标准的实现,在2020年居然仍然有着大量拥趸,无论是用于简单的文本处理任务还是用于处理" ...

  7. linux sed工具,玩转Linux - 神级工具 sed awk

    简介 本文主要介绍 Linux 系统的两个神级工具:sed 和 awk ,他们是Linux高手们必备的技能,很值得我们去研究的东西. 这里是我在网上书上收集的相关资料,因为这两个工具很有名也很重要,所 ...

  8. SALSA:基于Hi-C辅助组装长读长组装结果

    SALSA最初是在BMC genomics上发表,应该是当时最早提出利用Hi-C对contig进行纠错的软件,随后3D-DNA引入了这一策略.而最近升级之后的SALSA又在PLoS Computati ...

  9. ALLHIC使用 | HiC辅助基因组组装(三)

    安装 git clone https://github.com/tangerzhang/ALLHiC cd ALLHiC chmod +x bin/* chmod +x scripts/* expor ...

最新文章

  1. Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序
  2. Python 1 数据类型的操作
  3. ADB 操作手机的粘贴板
  4. Dapr牵手.NET学习笔记:想入非非的服务调用
  5. Watch online
  6. 浪潮服务器硬盘阵列怎么做,server - 浪潮服务器RAID阵列配置及OS安装
  7. 编程语言对比 引用数据类型-字典
  8. 12月江苏计算机考试报名入口,江苏2019年12月计算机等级报名时间丨报名系统
  9. egret dragonbones部件替换产生位移的解决方案
  10. oracle 学习日志--ORACLE EXP命令
  11. 蜗居6个月,苹果漏洞神猎手亮绝招:展示零点击 iOS exploit
  12. centos卸载nvidia驱动_linux卸载nvidia驱动 如何彻底删除N卡驱动?
  13. java工程师项目经验_java初级工程师项目经验简历范文
  14. 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-时序逻辑电路
  15. 可用于近红外光谱数据分析的网上公开数据集
  16. vue 生命周期图 + activated + deactivated
  17. axurerp出现错误报告_安装好axure8.1以后,打开直接报错退出
  18. Java匿名类习题_输出英文字母表和希腊字母表
  19. 金刚菩提子开裂自动修复此计算机,金刚菩提子裂了怎么办 教你这些修复方法...
  20. nvidia jetson nano 操作指南

热门文章

  1. 图像处理过程中图像不能加载的其中一个原因解答
  2. python与unity3d语言_Unity3D研究院之多语言用中文做KEY(七十五)
  3. 快手号怎么变成引流号?快手怎么引流能让账号火起来
  4. 关于游戏架构设计(一)
  5. 精度及3σ(三西格马定律)
  6. CAD外部参照如何重新定位?CAD外部参照重定位步骤
  7. HTML----春晓
  8. 什么是 Web 3.0?:未来去中心化互联网————初学者指南
  9. 宝宝一出生视力就差,只是因为缺少TA!
  10. 前端css基础知识点之opacity——透明度