11.4-命令Printf-格式化打印
Printf的作用及应用场景
1.Printf可以将输出的结构格式化,且支持一些特殊的字符,典型的格式化输出如cat等;
2.Printf应用于当cat无法调整出我们满意的输出格式时使用;
3.Printf可以在awk中使用,是awk编程中唯一的输出方式;
Printf的命令格式及参数
[root@localhost ~]#printf '打印格式' 实际内容 注:实际内容指的是字符串内容,文件名也仅会识别成字符串而无法读取内容
参数:
%ns n为数字,s代表string,意为一个长度为n的字符串,如果没有n则不限定长度;
%ni n为数字,i代表integer,亦为多少个整数字数;
%N.nf N与n为数字,f代表floating,意为N位数且小数点为n位
特殊字符:
\a 警告声音输出
\b [backspace]键
\f 清除屏幕(form feed)
\n 输出新的一行
\r [Enter]键
\t 水平[tab]按键
\v 锤直[tab]按键
\xNN NN为两位数的数字,可以转换数字成为字符,通过ASCII编码的方式,如'\45'='E'(范围20-80)
范文:
[root@localhost ~]# vim printf.txt
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
~
~
###直接跟文件名则直接打印文件名↓
[root@localhost ~]# printf printf.txt
printf.txt[root@localhost ~]#
###不写任何格式则输出内容异常↓
[root@localhost ~]# printf $(cat printf.txt)
Name[root@localhost ~]#
###按照行读入,然后按照格式逐个打印↓
[root@localhost ~]# printf '%s\t%s\t%s\t%s\n' $(cat printf.txt)
Name Chinese English Math
Average DmTsai 80 60
92 77.33 VBird 75
55 80 70.00 Ken
60 90 70 73.33
###不定义字符串长度在字符串过长时会引起输出异常↓
[root@localhost ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
###定义字符串长度但长度小于列最长字符串长度时,仍然异常↓
[root@localhost ~]# printf '%10s\t %5s\t %5s\t %5s\t %8s\t \n' $(cat printf.txt)
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
##定义字符串长度并长度正常时,输出符合预期↓
[root@localhost ~]# printf '%10s\t %7s\t %7s\t %5s\t %8s\t \n' $(cat printf.txt)
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
##若出现格式不对应情况,如下面的整数类型不对时,显示异常↓
[root@localhost ~]# printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt )
-bash: printf: Chinese: invalid number
-bash: printf: English: invalid number
-bash: printf: Math: invalid number
-bash: printf: Average: invalid number
Name 0 0 0 0.00
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
##正常如下↓
[root@localhost ~]# printf '%10s \t %2i \t %2i \t %2i \t %5.2f \n' $(cat printf.txt | grep -v Name)
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33