首页 > 编程笔记 > Linux笔记 阅读:19

Linux printf格式化输出命令的用法(附带实例)

printf 是 Linux awk 编程的重要格式化输出命令,其格式如下:
[root@localhost ~]# printf '输出类型输出格式' 输出内容
输出类型:
输出格式:
为了演示 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 格式化并以浮点型输出。在剩余的内容中:
printf 命令是 awk 中重要的输出动作,在 Bash 中只有 printf 命令。另外,因为 printf 命令只能格式化输出具体数据,不能直接输出文件内容或使用管道符,所以 printf 命令的格式还是比较特殊的。

相关文章