一. awk
1. awk的简介
- sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。
- awk缺省的行分隔符 是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。
- 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 | 目录路径 |
输出到标准输出 | |
-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:主要用于文件内容缓冲
第二行 (可以理解为从应用程序的角度来看内存分配)