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

 

posted @ 2019-08-29 10:33  FcBlogs  阅读(100)  评论(0编辑  收藏  举报