1.printf

同c中一样,用于格式化输出,同awk紧密联系,它不支持管道输入

 

 
  1. [root@www ~]# printf '列印格式' 实际内容 
  2. 选项与参数: 
  3. 关于格式方面的几个特殊样式: 
  4.        \a    警告声音输出 
  5.        \b    倒退键(backspace) 
  6.        \f    清除萤幕 (form feed) 
  7.        \n    输出新的一行 
  8.        \r    亦即 Enter 按键 
  9.        \t    水平的 [tab] 按键 
  10.        \v    垂直的 [tab] 按键 
  11.        \xNN  NN 为两位数的数字,可以转换数字成为字元。 
  12. 关于 C 程式语言内,常见的变数格式 
  13.        %ns   那个 n 是数字, s 代表 string ,亦即多少个字元; 
  14.        %ni   那个 n 是数字, i 代表 integer ,亦即多少整数位数; 
  15.        %N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数位数, 
  16.              假设我共要十个位数,但小数点有两位,即为 %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}'

 

逻辑运算:

 
  1. ~   匹配 
  2. !~ 不匹配 
  3. >   大于 
  4. <   小于 
  5. >=  大于或等于 
  6. <=  小于或等于 
  7. ==  等于 
  8. !=  不等于 

内置变量:

 
  1. ARGV    命令行参数数组 
  2. ENVIRON 环境变量数组 
  3. FILENAME    当前输入文件名 
  4. FNR 当前文件中的记录号 
  5. FS  字段分隔符 
  6. IGNORECASE  忽略正则表达式和串的大小写 
  7. NF  当前记录中的字段数 
  8. NR  至今读取的记录数 
  9. OFMT    数的输出格式,缺省为"%.6g" 
  10. OFS 输出字段分隔符 
  11. ORS 输出记录分隔符 
  12. RS  输入记录分隔符 
  13. RSTART  由match() 匹配的第一个字符的索引 
  14. RLENGTH 由match() 匹配的串的长度 
  15. SUBSEP  下标分隔符,缺省为"�34" 

一定要把awk看做是一门脚本语言,拥有一般编程语言的特征,参考这篇文章,总结的还不错:

 

3.档案对比工具

diff:

 
  1. [root@www ~]# diff [-bBi] from-file to-file 
  2. 选项与参数: 
  3. from-file :一个档名,作为原始比对档案的档名; 
  4. to-file   :一个档名,作为目的比对档案的档名; 
  5. 注意,from-file 或 to-file 可以 - 取代,那个 - 代表‘Standard input’之意。 
  6.  
  7. -b  :忽略一行当中,仅有多个空白的差异(例如 "about me" 与 "about     me" 视为相同 
  8. -B  :忽略空白行的差异。 
  9. -i  :忽略大小写的不同。 

diff以行为单位对比文件的不同。不仅可以对比文件,也可以对比目录,用途比较广泛

注意,diff的参数比较多,远不止上面这几个,其他的慢慢积累吧

cmp:

cmp以位为单位对比文件的不同

 
  1. [root@www ~]# cmp [-s] file1 file2 
  2. 选项与参数: 
  3. -s  :将所有的不同点的位元组处都列出来。因为 cmp 预设仅会输出第一个发现的不同点。 

 

patch:

patch 这个指令与 diff 可是有密不可分的关系,

diff -Naur passwd.old passwd.new > passwd.patch

上面的命令将产生补丁文件。

有了补丁文件后,可以更新旧文件,也可以还原新文件

 
  1. [root@www ~]# patch -pN < patch_file    <==更新 
  2. [root@www ~]# patch -R -pN < patch_file <==还原 
  3. 选项与参数: 
  4. -p  :后面可以接‘取消几层目录’的意思。 
  5. -R  :代表还原,将新的档案还原成原来旧的版本。 

因为补丁文件中有原文件的记录,所以这里不用再指定需要更新或还原的文件,所以说diff命令中两个文件的位置也是有关系的