shell工具之awk&find

一. awk

1. awk的简介

  1. sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。
  2. awk缺省的行分隔符 是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。
  3. awk实际上是一门 很复杂的脚本语言,还有像C语言一样的分支和循环结构。

awk命令行

awk option 'script' file1 file2 ...

awk option -f scriptfile file1 file2 ... 

awk脚本语言

以用-f参数指定一个脚本文件,编辑 命令的格式为:
/pattern/{actions} 
condition{actions}

注: pattern是正则表达式,actions是一系列操作。awk程序一行一行读出待处理文件,如果某一行与pattern 匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只 有actions部分,则actions作用于待处理文 件的每一行。

2. 常见用法

print命令
这里写图片描述
这里写图片描述
注:$0表示打印一行记录
$1表示打印第一列,即第一个域
$2表示打印第二个域,依次类推。$NF表示打印最后一个域

测试条件
这里写图片描述
这里写图片描述
printf
这里写图片描述
awk定制输入输出符
这里写图片描述
这里写图片描述

BEGIN&END

BEGIN和END,是awk中两个极具特色的表达式,可以用他们做文本处理之前的准备工作,之后的收尾工具,极具实 用价值,基本格式如下:

BEGIN{} /REG/{} END{} 
BEGIN{} condition{} END{} 

任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。
因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出终结果。

这里写图片描述

awk脚本
awk出了上面的基本命令行的使用方式之外,还有awk脚本方式,不过基本写法与命令行相同,语法也是基本类C 。

[hb@MiWiFi-R1CL-srv test]$ cat file  producta:109 
productb:103 
productc:12 
productd:11
producte:145 
productf:54 
productg:67 
producth:17 
producti:78 
productj:23 
productk:76 
productl:89 
productm:76 
productn:90 
producto:34 
productp:69 
productq:45 
productr:34
products:78 

[hb@MiWiFi-R1CL-srv test]$ cat level.awk 

#!/usr/bin/awk -f 

BEGIN{  
FS=":"  
excellent=0;  
good=0; 
middle=0;  
bad=0; } 

{  if($2 > 85){  
 excellent++;  
else if($2 > 75){  
 good++;  } 
 else if($2 > 60){ 
middle++;  } 
 else{  
  bad++;  } 
  } 

END{  printf("%d\n", excellent); 
 printf("%d\n", good); 
 printf("%d\n", middle);  
 printf("%d\n", bad); } 

5 
4 
2 
8 

awk内置变量

变量 意义
ARGC 命令行参数个数
ENVIRON 支持队列中系统环境变量的使用
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于-F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
[hb@MiWiFi-R1CL-srv test]$ awk 'BEGIN{FS=":"; OFS="#"}/^mysql/{print $1,$5,$(NF-1),$NF}' file 
mysql#MySQL Server#/var/lib/mysql#/bin/bash 

二. find

1. find简介

find命令在目录结构中搜索文件,并执行指定的操作。

find pathname -op [-print -exec -ok...]
名字 意义
pathname 目录路径
-print 输出到标准输出
-exec 执行该参数所给出的shell命令
-ok 以一种更为安全的模式来执行该参数给出的shell命令

2. 常见选项

选项 功能
-name 按照文件名查找文件
-perm 按照权限查找文件
-prune 不在当前指定目录中查找
-depth 首先在当前目录中找,然后在其子目录中找
-user 按照文件所属主来找
-group 按照文件所属组来找
-nogroup 查找无效所属组文件
-nouser 查找无效所属主文件
-newer 查找文件的新旧
-type 查找某一类型的文件
-size n 查找文件长度为n的文件
type 意义
-b 块设备
-d 目录
-c 字符设备文件
-p 管道
-l 链接文件
-f 普通文件

4. 常见用法

(1)按照文件名查找文件

[root@localhost progammer]# find / -name test.c
/home/jinyuyu/桌面/mp3lib/shixi/src/test.c
/home/jinyuyu/桌面/myshelllanguage/progammer/test.c
/home/jinyuyu/桌面/myfork/test.c

(2) 按照权限查找文件

[root@localhost progammer]# find /home/jinyuyu -perm 633
/home/jinyuyu/桌面/myshelllanguage/progammer/test.c

这里写图片描述

(3)查找系统中的所有者文件

[root@localhost progammer]# find / -user jinyuyu

这里写图片描述
(4)查找系统中无宿主的文件

[root@localhost progammer]# find / -nouser 

这里写图片描述

(5)查找更改时间的新旧

[root@localhost progammer]# find . -newer file.old ! -newer file.new
.
./file.new
./file.mid

这里写图片描述

(6)查找系统的所有管道文件

[root@localhost progammer]# find /dev -type c

这里写图片描述
(7)查找所有大小为size的文件

找字节大小为2048个字节的文件

find / -size 2048c

找字节大于2048字节小于4096字节的文件

find / -size +2048c -size -4096c

这里写图片描述

三. 几个实用的系统查看工具

1.查看计算机的体系结构

uname -a

这里写图片描述
2. 查看硬盘的使用情况

df -h

这里写图片描述
3. 查看CPU信息

cat /proc/cpuinfo

这里写图片描述
4. 查看内存信息

cat /proc/meminfo

这里写图片描述
5. 查看硬盘信息

iostat -x

这里写图片描述

6. free

第一行(可以理解为从操作系统的角度来看内存分配)

total: 总物理内存大小。

used: 已分配的大小,注意,对操作系统来说任何被使用的内存都是used.(包括buffers和cached)。

free: 未被分配的物理内存大小。

shared:共享内存大小,主要用于进程间通信。

buffers:主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。

cached:主要用于文件内容缓冲
第二行 (可以理解为从应用程序的角度来看内存分配)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37954088/article/details/80961231