目录
- 格式化打印:printf
- 数据处理工具:awk
- 文件对比工具:diff cmp patch
- 文件打印:pr
格式化打印:printf
我们在 bash 中想输出一个表格,但由于每个字段的长度不同,会导致输出的样子像下面这样,很乱,不方便看。
1 | # printf.txt |
我们想让表格格式化成下面那样,我们就可以用 printf 命令了。
1 | Name Chinese English Math Average |
用法
1 | printf '打印格式' 实际内容 |
1 | #例 将刚才的print.txt格式换成好看的表格 |
printf 另一个用处是将 16 进制显示为 ASCII
1 | #例 |
数据处理工具:awk
1 | awk '条件类型1{动作1} 条件类型2{动作2} ...' filename |
内置变量
| 变量名 | 意义 |
|---|---|
| NF | 每一行 (\$0) 拥有的字段总数 |
| NR | 目前 awk 所处理的是“第几行”数据 |
| FS | 目前的分隔字符,默认是空白键 |
| \$N | 第几个字段 |
1 | #例 |
BEGIN 和 END
1 | #例 awk默认分隔符是空格,但现在我们想改成‘:’。我们可以设置FS为‘:’。但下面这样写只有第二行开始生效。 |
awk 还可以对表内的数据做处理。
1 | # pay.txt |
假设我们有上面那个表(pay.txt),想添加一列 Total 做求和。我们可以这样写
1 | # 下面的‘>’表示换行。在一个动作内写多个命令可以用回车或‘;’隔开。而且这里定义的total变量可以直接使用,不需要要‘$’ |
awk 动作内{}是支持 if 的,上面的命令也可以写成下面那样
1 | cat pay.txt | \ |
文件对比工具:diff cmp patch
diff
diff 是比较两个文件间的差异,并以行为单位进行比较。
1 | # 用法 |
现在有 passwd.old passwd.new 文件。passwd.old 拷贝自/etc/passwd;passwd.new 是在/etc/passwd 的基础上做了修。删除了第四行,并将第六行替换为‘no six line’。
1 | mkdir -p /tmp/testpw |
现在我们可以查看新旧的 passwd 的差别了
1 | diff passwd.old passwd.new |
diff 还以可以比较两目录下的文件名
1 | diff /etc/rc0.d/ /etc/rc5.d/ |
cmp
对比两文件,以字节的地位对比,默认仅会输出第一个发现的不同点。
1 | # 用法 |
patch
该命令可以用来做打补丁的用途,也可以将文件回退到补丁前的状态。
centOS7 默认没有安装 patch 文件,我们需要自己安装。
1 | su - #切换到root账户 |
用法
1 | #更新 |
制作补丁文件。以上面的 passwd.old 和 passwd.new 为例。
1 | #制作补丁文件 |
文件打印:pr
1 | #打印/etc/man_db.conf |