Linux printf格式化输出命令的用法(附带实例)
printf 是 Linux awk 编程的重要格式化输出命令,其格式如下:
输出格式:
为了演示 printf 命令,我们需要准备一个 student.txt 文件,文件内容如下:
我们使用 printf 命令输出这个文件的内容,如下:
为了在使用 printf 命令输出时带有格式,应该这样做:
解释一下命令。因为我们的文档有六列,所以使用六个 %s 代表这六列字符串,每个字符串之间用 \t 分隔;最后还要加入 \n 使每行输出都换行,否则这些数据还是会连成一行。
如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,就要这样做:
printf 命令是 awk 中重要的输出动作,在 Bash 中只有 printf 命令。另外,因为 printf 命令只能格式化输出具体数据,不能直接输出文件内容或使用管道符,所以 printf 命令的格式还是比较特殊的。
[root@localhost ~]# printf '输出类型输出格式' 输出内容输出类型:
- %ns: 输出字符串。n 是数字,指代输出几个字符;
- %ni: 输出整数。n 是数字,指代输出几个数字;
- %m.nf: 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数,如 %8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数。
输出格式:
- \a: 输出警告声音;
- \b: 输出退格键,也就是 Backspace 键;
- \f: 清除屏幕;
- \n: 换行;
- \r: 回车,也就是 Enter 键;
- \t: 水平输出退格键,也就是 Tab 键;
- \v: 垂直输出退格键,也就是 Tab 键。
为了演示 printf 命令,我们需要准备一个 student.txt 文件,文件内容如下:
[root@localhost ~]# vim /root/student.txt ID Name PHP Linux MySQL Average 1 Liming 82 95 86 87.66 2 Sc 74 96 87 85.66 3 HuBo 99 83 93 91.66
我们使用 printf 命令输出这个文件的内容,如下:
[root@localhost ~]# printf '%s' $(cat /root/student.txt) IDNamePHPLinuxMySQLAverage1Liming829586872Sc749687853HuBo9983939391.66[root@localhost ~]#输出结果十分混乱。这就是 printf 命令,如果不指定输出格式,就会不带任何格式(换行、空格、Tab)地输出所有字符串。
为了在使用 printf 命令输出时带有格式,应该这样做:
[root@localhost ~]# printf "%s\t%s\t%s\t%s\t%s\t%s\n" $(cat student.txt) #注意:在printf命令的单引号中只能识别格式输出符号,手工输入的空格是无效的 ID Name PHP Linux MySQL Average 1 Liming 82 95 86 87.66 2 Sc 74 96 87 85.66 3 HuBo 99 83 93 91.66再强调一下,在 printf 命令的单引号中输入的任何空格都不会反映在格式输出中,只有格式输出符号才能影响 printf 命令的输出结果。
解释一下命令。因为我们的文档有六列,所以使用六个 %s 代表这六列字符串,每个字符串之间用 \t 分隔;最后还要加入 \n 使每行输出都换行,否则这些数据还是会连成一行。
如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,就要这样做:
[root@localhost ~]# printf "%i\t%s\t%i\t%i\t%i\t%8.2f\n" $(cat student.txt | grep -v Name) 1 Liming 82 95 86 87.66 2 Sc 74 96 87 85.66 3 HuBo 99 83 93 91.66先解释 cat student.txt | grep -v Name 这条命令。这条命令会把第一行标题取消,剩余的内容才使用 printf 格式化并以浮点型输出。在剩余的内容中:
- 第一列、第三列、第四列、第五列为整型,因此用 %i 输出;
- 第二列是字符串,因此用 %s 输出;
- 第六列是小数,因此用 %8.2f 输出。%8.2f 代表可以输出八位数,其中有两位是小数,有六位是整数,我们可以通过修改数字来调整小数输出位数,但是整数位输出不受数字调整影响。
printf 命令是 awk 中重要的输出动作,在 Bash 中只有 printf 命令。另外,因为 printf 命令只能格式化输出具体数据,不能直接输出文件内容或使用管道符,所以 printf 命令的格式还是比较特殊的。