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

浙公网安备 33010602011771号