1.printf
同c中一样,用于格式化输出,同awk紧密联系,它不支持管道输入
- [root@www ~]# printf '列印格式' 实际内容
- 选项与参数:
- 关于格式方面的几个特殊样式:
- \a 警告声音输出
- \b 倒退键(backspace)
- \f 清除萤幕 (form feed)
- \n 输出新的一行
- \r 亦即 Enter 按键
- \t 水平的 [tab] 按键
- \v 垂直的 [tab] 按键
- \xNN NN 为两位数的数字,可以转换数字成为字元。
- 关于 C 程式语言内,常见的变数格式
- %ns 那个 n 是数字, s 代表 string ,亦即多少个字元;
- %ni 那个 n 是数字, i 代表 integer ,亦即多少整数位数;
- %N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数位数,
- 假设我共要十个位数,但小数点有两位,即为 %10.2f 啰!
注意上面的n(N)都是限制最小位数,超出部分也不会被截掉。默认是空格补足,也可以用0补。默认的对齐方式是右对齐,加上修饰符-可以变成左对齐
2.awk
awk功能强大,是一门解释性的脚本语言,所以不要奇怪,它也有变量和函数
相对于sed处理一行内容,awk的处理对象也是行(默认,一行称为一条记录),但是可以细粒到栏(一栏称为一个域)
awk识别一条记录并不是固定为一行,由内置变量ORS决定(默认是回车符),RS是输出记录分隔符,默认也是回车
awk识别栏由FS决定,它是目前的分隔字元,预设是空白键或者tab键。
用法:
awk '(条件1){动作1} (条件2){动作2} ...' filename
条件的()不是必须的,复杂情况应该还是要加上的吧
条件可以是正则表达式,此时要用/pattern/格式
还有一些内置条件,比如BEGIN,END
{ }中如果有多个动作的话,要用;或者回车间隔开
要注意喔,awk 后续的所有动作是以单引号‘ ' ’括住的,由于单引号与双引号都必须是成对的, 所以, awk 的格式内容如果想要以 print打印时,记得非变量的文字部分,包含上一小节 printf 提到的格式中,都需要使用双引号来定义出来喔!因为单引号已经是 awk 的指令固定用法了!
awk设置栏分隔符可以用awk参数-F来设置,也可以放在{动作}中:
awk -F "|" '{print $1}' file 按照新的分隔符“|”进行操作。
awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
逻辑运算:
- ~ 匹配
- !~ 不匹配
- > 大于
- < 小于
- >= 大于或等于
- <= 小于或等于
- == 等于
- != 不等于
内置变量:
- ARGV 命令行参数数组
- ENVIRON 环境变量数组
- FILENAME 当前输入文件名
- FNR 当前文件中的记录号
- FS 字段分隔符
- IGNORECASE 忽略正则表达式和串的大小写
- NF 当前记录中的字段数
- NR 至今读取的记录数
- OFMT 数的输出格式,缺省为"%.6g"
- OFS 输出字段分隔符
- ORS 输出记录分隔符
- RS 输入记录分隔符
- RSTART 由match() 匹配的第一个字符的索引
- RLENGTH 由match() 匹配的串的长度
- SUBSEP 下标分隔符,缺省为"�34"
一定要把awk看做是一门脚本语言,拥有一般编程语言的特征,参考这篇文章,总结的还不错:
3.档案对比工具
diff:
- [root@www ~]# diff [-bBi] from-file to-file
- 选项与参数:
- from-file :一个档名,作为原始比对档案的档名;
- to-file :一个档名,作为目的比对档案的档名;
- 注意,from-file 或 to-file 可以 - 取代,那个 - 代表‘Standard input’之意。
- -b :忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "about me" 视为相同
- -B :忽略空白行的差异。
- -i :忽略大小写的不同。
diff以行为单位对比文件的不同。不仅可以对比文件,也可以对比目录,用途比较广泛
注意,diff的参数比较多,远不止上面这几个,其他的慢慢积累吧
cmp:
cmp以位为单位对比文件的不同
- [root@www ~]# cmp [-s] file1 file2
- 选项与参数:
- -s :将所有的不同点的位元组处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。
patch:
patch 这个指令与 diff 可是有密不可分的关系,
diff -Naur passwd.old passwd.new > passwd.patch
上面的命令将产生补丁文件。
有了补丁文件后,可以更新旧文件,也可以还原新文件
- [root@www ~]# patch -pN < patch_file <==更新
- [root@www ~]# patch -R -pN < patch_file <==还原
- 选项与参数:
- -p :后面可以接‘取消几层目录’的意思。
- -R :代表还原,将新的档案还原成原来旧的版本。
因为补丁文件中有原文件的记录,所以这里不用再指定需要更新或还原的文件,所以说diff命令中两个文件的位置也是有关系的