awk

awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上。并且可以使用管道, input | awk ''  | output
1.首先要知道形式
awk 'command' file 如 awk '{print $0}' a.txt b.txt   (后面可以跟一个或多个文件)
 
2.command学习。command是awk的精髓,其结构为 '条件 {动作} 条件2 {动作2} ……'
 
2.1关键字学习:
变量名 含义 
ARGC 命令行变元个数 
ARGV 命令行变元数组 
FILENAME 当前输入文件名 
FNR 当前文件中的记录号 
FS 输入域分隔符,默认为一个空格 
RS 输入记录分隔符 
NF 当前记录里域个数 
NR 到目前为止记录数 
OFS 输出域分隔符 
ORS 输出记录分隔符
 
2.2条件动作
条件包括:
     BEGIN END 特殊的两个,代表初始化和扫尾
     判断:如$1 == "abc"  $NR == 5  /^tcp/(表示正则匹配)
   也可不写条件,则表示“全匹配”。从这个角度来讲 条件本质上是一种筛选规则。
 
动作:
       {print NR,NF,$1,$NF,}
   {if(xxx) xxx; else xxx;}
   {for(key in array) xxx}
 
3.实例学习:
查看机器建立的各连接数
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
 
看每个连接的占用内存byte数---apache
ps aux|grep -v grep|awk '/httpd/ {sum+=$6;n++};END{print sum/n}'
 
根据逗号对abc文件的每一行进行split,然后按照第二列进行排序,结果输出到abc-sort中
 
awk -F, '{print $1}' abc | sort -n -k 2 -t: -r > abc-sort

sort命令解释:
-n 是按照数字排序
-k 是按照第二列排
-t: 是以:为分隔符
-r 是倒叙

 
git查看本次需要提交中变更的内容
git diff master HEAD --stat | awk '{printf "%s\n",$1}' |grep domain | awk -F'/' '{printf "%s\n",$NF}' | sort
 
批量重命名
ls *需要替换* | awk '{org=$0;gsub("需要替换","替换为");system("echo "org" "$0)}' 
 
 

sed

sed用法很多,但是根据上节之中,用来做内容替换最多。

sed -i -e 's/^dubbo_provider_version=.*[^e]$/&-pre/' /home/wuji/webroot-xxx/WEB-INF/classes/biz.properties
该命令作用是把 biz.properties中的dubbo_provider_version=1.0.0 替换为dubbo_provider_version=1.0.0-pre
 
替换的格式为 sed -e ’s/abc/def’ file.txt  把abc替换为def。其中第一部分的正则在第二部分可以被&取到。注意取到的是从dubbo开头的全部,而不是.*部分,这是正则表达式的知识。
 
并且s可以扩展为
 
举例2:去掉所有html标签
$ sed -e 's/<[^>]*>//g' myfile.html
 
g的作用:不加只替换第一个匹配,加了会替换所有匹配
sed -i 直接替换文件而不是在屏幕上输出 
 
学习过vim的朋友们可以轻易的联想到vim的命令模式,也有:s/abc/def的写法,所以linux下的知识很多都可以触类旁通。
 

uniq

uniq可以去除重复行或者做group by的统计
文件file:
a
a
b
b
b
 
sort file | uniq :
a
b
 
 
sort file | uniq -c:
2 a
3 b
 
之所以和sort组合是要把所有的a弄到一起,防止b后面有a的情况。
uniq -d 只显示重复的 ,-c只显示不重复的,两者互斥。
uniq -dc 只显示重复并统计 
 

sort  

 
功能说明:将文本文件内容加以排序。
语  法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。
 
实例:
以第一个关键列的第二个字母开始进行排序:
$ sort -k 1.2 file.txt
以关键列第一列的第二个字母进行排序,如果第二个字母相同则根据第三列以数值的标准进行降序排列。
$ sort -k 1.2,1.2 -k 3,3nr file.txt 
 
-k 排序字段,按照-t 分隔符来区分的,从0开始。
-n 以数字格式排序。默认string方式比较的话,20和9比较是后者大。
-r 反序
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-b 忽略每行前面开始出的空格字符。
-u 去除重复行。(可以利用这个来去重
sort选项没特别需要讲的,需要注意的就是-k。-k选项的具体语法格式如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。
如果不设定End部分,那么就认为End被设定为行尾。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。
我们重点说说Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。
同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。 
 

od

od命令是分析文件内容的工具,很多时候不知道文件的内容编码,此时用od命令看文件内部的字节构成是最直接的方式,使用方法:
od -Ax -tcx4 file 。
 
可以用于分析字符编码 是否utf-8 ,是否LE,BE
至于如何分辨,还需要了解每种编码的规则,譬如utf-8一般以三个字节来显示中文,而gbk则是两个。

基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od的更多相关文章

  1. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od(转)

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

  2. Linux Shell编程之常用技巧

    前言 本文集中介绍了bash编程中部分高级编程方法和技巧.通过学习本文内容,可以帮你解决以下问题: 1.bash可以网络编程么? 2..(){ .|.& };. 据说执行这些符号可以死机,那么 ...

  3. Linux Shell 编程 教程 常用命令

    概述: Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户 ...

  4. linux命令-awk,sort,uniq

    学习地址:http://man.linuxde.net/awk#awk的工作原理 awk 选项参数说明: -F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字 ...

  5. shell编程基础(七): 处理文件命令sed与awk

    一.sed(以行为单位处理文件) sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑 ...

  6. Shell编程时常用的系统文件(转)

    10.1 Linux系统目录结构 / 根目录,所有文件的第一级目录 /home 普通用户家目录 /root 超级用户家目录 /usr 用户命令.应用程序等目录 /var 应用数据.日志等目录 /lib ...

  7. Shell编程——vim常用命令

    [vim]工作模式切换:    在普通模式下输入 i(插入).c(修改).o(另起一行) 命令时进入编辑模式:按 esc 键退回到普通模式.    在普通模式下输入冒号(:)可以进入命令模式.输入完命 ...

  8. 大数据Shell编程 之 常用正则表达式

    使用man grep查看grep的帮助文档,有如下内容: 可以看出,正则表达式由三类,分别是 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 B ...

  9. 【Linux】日志分析工具grep sed sort

    遇到一个问题,在查询日志时发现,服务器上打印的文件有很多个,每个都存储了一部分日志, 需要将日志按照时间排序,并显示所有日志. 原命令: grep -h  searchContent */*log 搜 ...

随机推荐

  1. Android笔记——AsyncTask介绍

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

  2. python code

    执行动态语句 执行字符串中的代码 http://www.cnblogs.com/fanweibin/p/5418817.html #!usr/bin/env python #coding:utf-8 ...

  3. 简单使用Git和Github来管理自己的代码和读书笔记

    原文链接:http://my.oschina.net/bxxfighting/blog/378196   先注册github.com的账号官方网站: https://github.com/ 注册界面, ...

  4. Android开发之自定义的ListView(UITableViewController)

    Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

  5. React Native组件介绍

    1.React Native目前已有的组件 ActivityIndicatorIOS:标准的旋转进度轮; DatePickerIOS:日期选择器: Image:图片控件: ListView:列表控件: ...

  6. 『.NET Core CLI工具文档』(十三)dotnet-publish

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-publish 翻译:dotnet-publish 名称 dotnet-publish - 打包应用程序及 ...

  7. Task.Factory.StartNew的用法

    代码: private void button5_Click(object sender, EventArgs e) { ; Task.Factory.StartNew(() => { Mess ...

  8. 随机记录工作中常见的sql用法错误(一)

    没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...

  9. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  10. @Autowired注解的使用

    使用Spring时,通过Spring注入的Bean一般都被定义成private,并且要有getter和setter方法,显得比较繁琐,增加了代码量,而且有时会搞忘造成错误. 可以使用@Autowire ...