格式化打印:printf
printf '打印格式' 实际内容
参数:
\a 警告声音输出
\b 退格键(backspace)
\f 清除屏幕(form feed)
\n 输出新的一行
\r 亦即Enter按键
\t 水平的[tab]键
\v 垂直的[tab]键
关于C程序语言内,常见的变量格式
%ns n是数字,s代表string,即多少个字符
%ni n是数字,i代表integer,即多少整数字数
%N.nf n与N都是数字,f代表floating(浮点)
# printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
awk 用法
相比于sed常常作用于一整行的处理,awk则倾向于将一行分成数个字段来处理。适合于小型的数据处理。
awk '条件类型1 {动作1} 条件类型2{动作2} ... ' filename
# last -n 5 | awk '{print $1 "\t" $3}'
取出账号与登录者的IP,且账号与IP之间以[tab]隔开。
每一行的每个字段都是变量名称的,就是$1,$2等变量名称。
$0代表一整行数据的意思。
awk的处理流程:
- 读入第一行,并将第一行的数据填入$0,$1,$2等变量中;
- 依据条件类型的限制,判断是否需要进行后面的动作;
- 做完所有的动作与条件类型;
- 若还有后续的行的数据,则重复上面1~3的步骤,直到所有的数据都读完为止。
awk的内置变量
变量名称 | 代表意义 |
---|---|
NF | 每一行($0)拥有的字段总数 |
NR | 目前awk处理的是第几行的数据 |
FS | 目前的分割字符,默认是空格键 |
# last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'
awk的逻辑运算
运算符:>,<,>=,<=,==,!=
# cat /etc/passwd | \
> awk '{FS=":"} $3<10 {print $1 "\t" $3}'
用冒号作为分隔符,第三列小于10以下的数据。
像冒号作为分隔符,这样设置,效果是从第二行开始,如果要从第一行就生效,
可以预先设置awk变量。如下,加BEGIN
# cat /etc/passwd | \
> awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'
- 所有awk的动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号“;”间隔,或者直接用【Enter】按键也隔开每个命令。
diff用法
文件比较工具。diff通常用在同一的文件(或软件)的新旧版本区别上。
diff [-bBi] from-file to-file
参数:
from-file : 要做比较的文件名
to-file : 作为目的比较文件的文件名
-b : 忽略一行当中仅有多个空白的区别
-B : 忽略空白行的区别
-i : 忽略大小写的不同
# diff passwd.old passwd.new
diff也可以比较整个目录下的区别。
# diff /etc/rc3.d/ /etc/rc5.d/
cmp用法
cmp也是比较两个文件,但是它是利用字节为单位去比较,也可以比较二进制文件。注意diff主要是以行为单位比较的。
cmp [-s] file1 file2
# cmp passwd.old passwd.new
patch用法
与diff密不可分的,前面提到diff用来分辨两个版本之间的区别,而patch可以制作补丁。
# diff -Naur passwd.old passwd.new > passwd.patch
以/tmp/test 内的passwd.old与passwd.new 制作补丁
patch -pN < patch_file 更新
patch -R -pN < patch_file 还原
参数:
-p : 后面的N表示取消几层目录的意思
-R : 代表还原,将新的文件还原成原来旧的版本
# patch -p0 < passwd.patch
将刚才制作出来的patch file 用来更新旧版本数据
# patch -R -p0 < passwd.patch
恢复旧文件的内容
pr 用法
用做文件打印准备。