设为首页 收藏本站
查看: 912|回复: 0

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

[复制链接]

尚未签到

发表于 2015-12-3 14:19:35 | 显示全部楼层 |阅读模式
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则是两个。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146879-1-1.html 上篇帖子: 本地启动spark-shell 下篇帖子: beaglebone_black_学习笔记——(3)点亮LED之shell命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表