8.4 文件的格式化与相关处理
8.4.1 printf - format and print data
[root@localhost tmp]#printf [format] [文本1] [文本2] ..
%ns 那个 n 是数字, s 代表 string ,亦即多少个字符;
%ni 那个 n 是数字, i 代表 integer ,亦即多少整数字数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),有n位小数字数。
%s | 字符串 |
%f | 浮点格式 |
%c | ASCII字符,即显示对应参数的第一个字符 |
%d,%i | 十进制整数 |
%o | 八进制值 |
%u | 不带正负号的十进制值 |
%x | 十六进制值(a-f) |
%X | 十六进制值(A-F) |
%% | 表示%本身 |
\a | 警告字符,通常为ASCII的BEL字符 |
\b | 后退 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 表示\本身 |
[root@localhost tmp]# printf "%d\n" 123
[root@localhost tmp]# printf "1234567890\n%5d\n" 123
1234567890 #按整数输出123,占5列,右对齐,左边补2个空格
[root@localhost tmp]# printf "1234567890\n%-5da\n" 123
1234567890 #按整数输出123,占5列,左对齐,右边补2个空格
[root@localhost tmp]# printf "%s\n" 1 2
[root@localhost tmp]# printf "%d\n" 1 2
[root@localhost tmp]# printf "%f\n" 1 2
[root@localhost tmp]# printf "%8.2f\n" 1 2
[root@localhost tmp]# printf "%o\n" 12
[root@localhost tmp]# printf "%x\n" 12
[root@localhost tmp]# cat test #测试文件
name Chinese English Math Average
[root@localhost tmp]# printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat test)
name Chinese English Math Average #输出字段用tab分隔
[root@localhost tmp]# printf '%10s %5i %5i %5i %8.2f \n' $(cat test)
bash: printf: Chinese: invalid number #姓名占10列
bash: printf: English: invalid number #成绩占5列
bash: printf: Math: invalid number #平均成绩占8列,2为小数
bash: printf: Average: invalid number #目的是为了输出能对齐
DmTsai 80 60 92 77.33 #成功操作看下一个例子
[root@localhost tmp]# printf '%10s %5i %5i %5i %8.2f \n' $(cat test|grep -v name)
DmTsai 80 60 92 77.33 #不显示含有name的那一行,即第一行