Shell工具(awk,sort)

awk:文本分析工具(查询统计分析)

把文件逐行度入,以空格为默认分隔符将每行切片,切片的部分在进行各种分析处理,因为切开的部分使用awk可以定义变量,运算符,使用流程控制语句进行深度加工与分析。

参数:

-F:指定输入文件拆分分隔符

-v:赋值一个用户定义变量

awk:内置变量

FILENAME:awk浏览的文件名

NF:浏览记录的域的个数,根据分隔符分隔后的列数

NR:已读的记录数,也是行号

$0:变量是指整条记录 $1:表示当前行的第一个域

$NF:表示最后一列的信息

//默认每行空格切割数据

echo "abc 123 456" | awk '{print $1"&"$2"&"$3"&"}'

//搜索passwd文件有root关键字的所有行(打印含有匹配信息的所有行)

awk '/root/{print $0}' passwd

//打印匹配行中的第7列数据

awk -F ":" '/root/{print $7}' passwd

//统计passwd的文件名,每行的行号,每行的列数,对应的完整行内容(打印文件每行属性信息)

awk -F: '{print "文件名:"FILENAME",行号:"NR",列数:"NF",内容:"$0}' passwd

//可读性强的写法(%S:占位符)

awk -F: '{printf("文件名:%s,行号:%s,列数:%s,内容:%s\n",FILENAME,NR,NF,$0)}' passwd

//打印第二行信息

awk -F ":" 'NR==2{printf("文件名:%s,内容:%s\n",FILENAME,$0)}' passwd

//查找以c开头的资源

ls -a | awk '/^C/'

//打印第一列

awk -F: '{print $1}' passwd

//打印最后一列

awk -F: '{print $NF}' passwd

//打印倒数第二列

awk -F: '{print $(NF-1)}' passwd

//打印10到20行的第一列

awk -F: '{if(NR>=10 && NR<=20){print $1}}' passwd

//多分隔符的使用

echo "one:two/three" | awk -F "[:/]" '{print $1"&"$2"&"$3}'

//添加开始和结束

echo -e "abc\nabc" | awk 'BEGIN{print "开始"}{print $0}END{print "结束"}'

//连续的空格也会被分隔掉

echo "abc    itb icc" | awk '{print $1"&"$2"&"$3}'

//使用循环拼接分割后的字符串

echo "abc    itb icc" | awk -v str="" '{for(n=1;n<=NF;n++){ str=str$n }} END{print str}'

//操作运算符

echo "2.1" | awk -v i=1 '{print $0+i}'

//切割ip

ifconfig | awk '/broadcast/{print $0}' | awk '{print $2}'

//显示空行行号(添加空行|查询空行行号)

sed 'G' sed.txt | awk '/^$/{print NR}'

小结:

文本字符串操作常用:grep sed awk cut

grep:查找匹配行

cut:截取数据,截取某个文件中的列,重点是按照列分隔,这个命令不适合截取文件中有多个空白字符的字段

sed:增删改查数据,用于在文件中以行来截取数据进行增删改查

awk:截取分析数据,可以在某个文件中以竖列来截取分析数据,如果字段之间含有多个空白字符也可以获取需要的数据,awk是一种语言,可以深入分析文件数据

sort:排序

参数:

-n:按照数值的大小来排序

-r:以相反的顺序来排序

-t:设置排序所用的分隔字符,默认空格是分隔符

-k:指定需要排序的列

-o:将排序后的结果存入指定文件

-u:去重复

 

sort.txt

张三 30

李四 90

王武 70

张三 30

//按照成绩进行升序排列

sort -t " " -k2n,2 sort.txt

//去掉重复行(-uk1,2:去掉第一列,第二列完全重复的数据)(去重复要放到最后)

sort -t " " -k2n,2 -uk1,2 sort.txt

//将数据保存到sort2.txt

sort -t " " -k2n,2 -uk1,2 -o sort2.txt sort.txt

//降序排序

sort -t " " -k2nr,2 -uk1,2 -o sort2.txt sort.txt

 

sort3.txt

部门A,部门A,3

部门A,部门B,0

部门A,部门C,10

部门B,部门A,3

部门B,部门B,3

部门C,部门K,3

部门C,部门E,3

 

//以“,”分割,先对第一列字符串升序,再对第三列数字将序(多列排序)

sort -t "," -k1,1 -k3nr,3 sort3.txt

 

posted @ 2021-04-25 22:16  zfxd  阅读(387)  评论(0)    收藏  举报