基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od,awkuniq
基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od,awkuniq
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下的知识很多都可以触类旁通。
评论暂时关闭