1. 程式人生 > >Linux之awk使用

Linux之awk使用

基本語法

  • $n :當前記錄的第n個欄位,比如n為1表示第一個欄位,n為2表示第二個欄位
  • $0:執行過程中當前行的文字內容
  • \t:製表符
  • \n:換行符
  • -F'[:#/]' : 定義三個分隔符,注意有-F和無-F的區別,無-F直接用空格作為分隔符
  • BEGIN: 初始化程式碼塊,在對每一行進行處理之前,初始化程式碼,主要是引用全域性變數,設定FS分隔符
  • END:結尾程式碼塊,在對每一行進行處理之後再執行的程式碼塊,主要是進行最終計算或輸出結尾摘要資訊
  • 一行一行輸出file中內容:
awk '{print}'  file
  • 輸出相同個數的a行,一行只有一個a:
awk '{print "a"}'  file
  • 將每一行的第一個欄位和a,分行輸出:
awk -F: '{print $1; print "a"}'  file
  • 輸出每一行的第一個欄位後直接輸出a,不換行:
awk -F: '{print $1; print "a"}'  file
  • 輸出行號:
awk '{print NR,$0}' result
  • 顯示第五行:
awk -F: 'NR==5{print}' result
  • 顯示第一個元素是開始時右端項非零元的第二個元素
awk '{if(\$1=="開始時右端項非零元:"){printf \$2 "\t ";}}' result

統計文字資訊

要統計的文字資訊存在grade.txt中

Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62

則統計程式碼如下:

awk 'BEGIN{math=0;eng=0;com=0;printf "Lineno.   Name    No.    Math   English   Computer    Total\n";printf "------------------------------------------------------------\n"}{math+=$3; eng+=$4; com+=$5;printf "%-8s %-7s %-7s %-7s %-9s %-10s %-7s \n",NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf "------------------------------------------------------------\n";printf "%-24s %-7s %-9s %-20s \n","Total:",math,eng,com;printf "%-24s %-7s %-9s %-20s \n","Avg:",math/NR,eng/NR,com/NR}'  grade.txt