博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sed和awk常用方法
阅读量:2066 次
发布时间:2019-04-29

本文共 1527 字,大约阅读时间需要 5 分钟。

sed和awk是比较基础的类Unix系统中批量处理文本的好东西。sed负责做行的编辑,awk负责做列编辑。这里将说一点这方面的知识。需要明白的一点就是他们的处理都是按照行来做的处理。

sed

命令格式

sed [options] 'command' file(s)  sed [options] -f scriptfile file(s)

基本的命令格式:

[address[,address]][!]command[agruments]

选项

选项 意义
-n 安静模式
-e 输入多个编辑指令
-i are neat
-f 引导sed脚本文件名。

常用命令

选项 意义
a 追加
d 删除命令
s 替换命令,支持正则的替换
i 插入
p 输出,通常和-n一块使用
c 将制定地址直接替换
r [address]r file,将文件内容插入到address位置
w [address]w file,将address位置内容写入到文件中

sed实例

awk

命令格式

awk [-F  field-separator]  'commands'  input-file(s)

最基本用法

$ ps aux | awk '{print $2}'

这样将会打印出当前在运行的进程的编号。如果你想在首部尾部添加自己的打印

$ ps aux | awk 'BEGIN {print "this is head"} {print $2} END {print "this is tail"}'

在awk中内置的变量

变量 意义
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

在最后实例里面计算平局值的时候就使用了NR。

printf语法

awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

awk运算符

在处理文本的时候可以做一些简单的运算

运算符

= += -= = /= %= ^= *=

逻辑

|| 逻辑或

&& 逻辑与
~ ~! 匹配正则表达式和不匹配正则表达式
< <= > >= != == 关系运算符

数学计算

    • 加,减
  • / & 乘,除与求余
    • ! 一元加,减和逻辑非
      ^ * 求幂
      ++ – 增加或减少,作为前缀或后缀

实例

计算最大值、合计、平均值

在awk里面执行分为两个单元,每行处理的时候在前面那个括号里执行。END之后{}中的内容就是用于做

$ cat test.log0 0 147.0860 10 141.2690 20 100000 30 2805.220 40 152.0030 50 144.7620 60 144.926

最大值

cat test.log | awk '{if(m<$3) m=$3} END{print m}'{  if(m<$3) m=$3}END {  print m}

合计

cat test.log | awk '{m+=$3} END{print m}'{  m+=$3}END {  print m;}

平均值

cat test.log | awk '{m+=$3} END{print m}'{  m+=$3}END {  print m/NR;}

转载地址:http://fdfmf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《热题 Hot 100-45》338.比特位计数
查看>>
读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
查看>>
Leetcode C++《热题 Hot 100-46》739.每日温度
查看>>
Leetcode C++《热题 Hot 100-47》236.二叉树的最近公共祖先
查看>>
Leetcode C++《热题 Hot 100-48》406.根据身高重建队列
查看>>
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>