next up previous contents
Next: 實機練習題 Up: 正規表示法 Previous: 正規表示法範例   Contents

格式化列印

  • 列印格式管理員 printf
    1. 指令用法:
      [root@linux ~]# printf '列印格式' 實際內容
      選項:
      關於格式方面的幾個特殊樣式:
             \a    警告聲音輸出
             \b    倒退鍵(backspace)
             \f    清除螢幕 (form feed)
             \n    輸出新的一行
             \r    亦即 Enter 按鍵
             \t    水平的 [tab] 按鍵
             \v    垂直的 [tab] 按鍵
             \xNN  NN 為兩位數的數字,可以轉換數字成為字元。
      關於 C 程式語言內,常見的變數格式
             %ns   那個 n 是數字, s 代表 string ,亦即多少個字元;
             %ni   那個 n 是數字, i 代表 integer ,亦即多少整數位數;
             %N.nf 那個 n 與 N 都是數字, f 代表 floating (浮點),如果有小數位數,
                   假設我共要十個位數,但小數點有兩位,即為 %10.2f 。
      
    2. 如何將 printf.txt 內容,以如下漂亮的版面配置輸出?
      Name     Chinese   English   Math    Average
      Dmdyw        80        60     92      77.33
      csie          75        55     80      70.00
      Ken           60        90     70      73.33
      
    3. 每個單字中間以 [tab] 按鍵隔開。
      [root@linux ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' `cat printf.txt`
      Name     Chinese         English         Math    Average
      Dmdyw   80      60      92      77.33
      csie     75      55      80      70.00
      Ken      60      90      70      73.33
      # %s 表示以字串 (string) 顯示內容,每個內容以 \t 即 [tab] 隔開。
      # 第一行因為某些單字長度較長,所以無法對齊。
      
    4. 第二行以後,分別以字串、整數、小數點來顯示
      [root@linux ~]# printf '%10s %5i %5i %5i %8.2f \n' `cat printf.txt |\
      > grep -v Name`
          Dmdyw    80    60    92    77.33
            csie    75    55    80    70.00
             Ken    60    90    70    73.33
      # %8.2f 針對不同的小數位數來進行格式輸出,
      # 例題:printf '%10s %5i %5i %5i %8.1f \n' `cat printf.txt | grep -v Name`
      
    5. 列出數值 45 代表的字元為何?
      [root@linux ~]# printf '\x45\n'
      E
      
  • 檔案列印: pr
    # 列印 /etc/man.config 
    [root@linux ~]# pr /etc/man.config
    
    2003-02-10 23:20                 /etc/man.config                  Page 1
    
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    .....以下省略......
    
    # 第一行的標題中『檔案時間』、『檔案檔名』及『頁碼』為 pr 處理的結果。
    

練習題
  1. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接字串之方式列出?
    Sol. printf '\t\%s\n' `cat printf.txt`
  2. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接 10 個字元字串之方式列出?
    Sol. printf '\t\%10s\n' `cat printf.txt`
  3. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接整數之方式列出?
    Sol. printf '\t\%i\n' `cat printf.txt`
  4. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接 7 個位數整數之方式列出?
    Sol. printf '\t\%7i\n' `cat printf.txt`
  5. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接浮點數之方式列出?
    Sol. printf '\t\%f\n' `cat printf.txt`
  6. 如何以 printf 將檔案 printf.txt 中的資料,以每行為 [tab] 按鍵後接,十個位數,但小數點有兩位的浮點數之方式列出?
    Sol. printf '\t\%10.2f\n' `cat printf.txt`
  7. 如何以 printf 列出數值 42 代表的字元?
    Sol. printf '\x42\n'



2017-06-14