Linux 常用命令总结~正则表达式与文件格式化处理(2)

格式化打印: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的处理流程:

  1. 读入第一行,并将第一行的数据填入$0,$1,$2等变量中;
  2. 依据条件类型的限制,判断是否需要进行后面的动作;
  3. 做完所有的动作与条件类型;
  4. 若还有后续的行的数据,则重复上面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 用法
用做文件打印准备。

猜你喜欢

转载自blog.csdn.net/Vincent_yuan1991/article/details/87870741