Linux下的sed和awk

來源:互聯網
上載者:User

  Linux shell編程之awk的用法
  1. awk的使用
  準系統:在檔案或字串中基於指定規則瀏覽和抽取資訊。awk抽取資訊後,才能進行其他文本操作。完整的awk指令碼通常用來格式化文字檔資訊。
  調用方式:
  1. 命令列方式
  2. 將所有awk命令插入一個檔案,並使awk程式可執行,然後使awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來調用它。
  3. 將所有的awk命令插入一個單獨檔案,然後調用。
  選項說明:-F 域符號 預設為空白格
  -f 指明awk指令碼
  2. 模式和動作
  1. 任何awk語句都由模式和動作組成。在一個awk指令碼中可能有許多語句。
  模式部分決定動作語句何時觸發及觸發事件。模式預設為執行狀態。
  處理即對資料進行的操作。
  2. 模式可以是任何條件陳述式或複合陳述式或Regex。
  3. 模式包括兩個特殊欄位BEGIN和END。
  域和記錄
  域標識:$1,$2,…,$n。用逗號做域分隔。$0表示所有域。
  列印域或所有域:print命令
  註:當碰到awk錯誤時,可相應尋找:
  1. 確保整個awk命令用單引號括起來
  2. 確保命令內所有引號成對出項
  3. 確保用花括弧括起動作語句,用圓括弧括起條件陳述式
  4. 不要忘記使用花括弧
  條件操作符
  ~ 匹配Regex
  !~ 不匹配Regex
  內建變數:
  NF:每一條記錄中網域名稱數
  是將變數$PWD的傳回值傳入awk並顯示其目錄。
  可以利用NF擷取檔案名稱
  註:但這裡指定域分隔字元為/
  NR:記錄個數

1).儲存awk輸出: #awk '{print $0}' myfile>newfile
2).使用tee,在輸出到檔案的同時輸出到螢幕(利用管道'|')
     #awk '{print $0}' myfile |tee newfile
3).列印報告頭,#awk 'BEGIN {print "hello,this is Title\n---------"}{print $0}' newfile
4).列印資訊尾.#awk 'BEGIN{print $0} END {"end of file."}' myfile
5).匹配,如下若在myfile第二列中帶有BROWN,則列印資訊
     #awk '{if ($2~/BROWN/) print $0}' myfile
6).精確匹配,同上,只是將~改為==
7).不匹配,有時要瀏覽資訊並抽取不匹配操作的記錄,與~相反的符號是!,如下
#awk '$0 !~/BROWN/' myfile
8).比較
如小於: #awk 'if ($1<$2) print $1' myfile
9).設定大小寫 #awk '[Gg]reen/' myfile
10).任一字元,運算式/^...a/意為前三個字元是任一字元
#awk '$1~/^...a/' myfile
11).或關係匹配,#awk '$0~/(YELLOW || RED)/' myfile
12).與:&& ,或:||
13).awk內建變數
<1>.要快速查看記錄個數,應使用NR,如:#awk 'END {print NR}' myfile <2>.以下使用NF變數顯示每一條讀記錄中有多少個域,並在END部份 列印輸入檔案名稱。#awk '{print NR,NF,$0} END {print FILENAME}' myfile
<3>. 判斷並輸出 . #awk '{if(NR>0 && $4~/BROWN/) print $0' myfile
14).可以設定輸入欄位到域變數名。
15).域值比較操作。
   @1.在BEGIN中給變數名賦值。通常在BEGIN部分賦值是很有益的,可以在awk運算式進行改動時減少很大麻煩.
   @2.在關係操作中使用實際數值,使用關係操作時必須用括弧括起來.
#awk '{if($6<27) print $0}' myfile
#awk 'BEGIN {BASELINE="27"}{if ($6<BASELINE) print $6}' myfile
17).修改資料域取值
當在awk中修改任何域時,重要的一點是實際的檔案可修改,改動的是cache中的awk複本,awk會在變數NR或NF中反映出修改的痕迹。
#awk '{if($1=="M.TANS")$6=$6-1;print $6}' myfile
18).修改文本域
#awk '{if($1=="J.Troll")($1="J.L.Troll");print $1}' myfile
19).只顯示修改記錄
#awk '{if($1=="J.Troll"){$1="J.L.Troll";print $1}}' myfile
20).建立新的輸出域
在awk中處理資料時,基於各域進行計算的建立新域是個好的習慣。如下樣本:
#awk 'BEGIN{print "Name    Score\t"}if($6<$7){$8=$7-$6;print $8}' myfile
21).增加列值
#awk 'tot+=$6;END{print "Club Total point." tot}' myfile
22).使用模式列印檔案名及其長度,放入變數tot中
#ls -l | awk'/^[^d]{print $9 "\t" $5}{tot+=$5} END {print "Total KB:tot"}'
23).awk內建的字串函數
24).awk指令檔

如以上的所述的諸多情況,這裡只不過命令放在一個檔案中,且該檔案必須是!/bin/awk -f ,因為這樣才會使這個檔案可以自解釋。否則將不能作用。為了容易分別,最好將檔案帶一個副檔名.awk,完成對檔案的編寫後,再利用chmod u+x使檔案可以執行。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   以上只是我在實驗中的一些情況,awk命令功能很強大,大家可以參考其它的一些手冊去獲得更清楚的說明

  Linux shell編程之sed用法
  1. 是一個非互動性文字資料流編輯器。它編輯檔案或標準輸入匯出的文本拷貝。
  2. 通過行號或Regex指定要改變的文本行
  3. sed不與初始檔案打交道,而只與它的一個拷貝打交道,如果操作結果沒有重新導向到一個檔案,那麼將輸出到螢幕。
  調用方式:
  a. 命令列方式
  b. 將sed命令插入指令檔中,然後調用sed
  c. 將sed命令插入指令檔中,使得指令檔為可執行。
  儲存sed輸出
  重新導向到一個新檔案 >
  sed中定位文本的方式
  x 一行號
  x,y 行號範圍
  /pattern/ 查詢包含模式的行
  /pattern/pattern/ 查詢包含兩個模式的行
  /pattern/,x 在指定行號上查詢匹配模式的行
  x,/pattern/ 通過行號和模式查詢匹配行
  x,y! 查詢不包含行號x,y的行
  sed編輯命令
  p 列印文本
  匹配元字元$前,必須使用反斜線\
  = 列印行號 使用-e選項
  如果既列印行號又列印匹配行,必須使用兩個sed命令,並使用-e選項
  附加文本
  使用符號a\ ,可以指定文本一行或多行附加到指定行。若不指定文本置放位置位置,sed預設放置在每一行後面。
  建立sed指令檔
  建立指令碼檔案,第一行為:
  #!/bin/sed -f ----注 說明sed命令解釋行。指令碼在這一行尋找sed以運行命令,這裡定位在/bin
  插入文本:在指定行前面插入,它也只接受一個地址。
  刪除文本:d
  替換命令用替換模式替換指定模式
  使用sed實現的一個重要功能是在另一個系統中下載的檔案中剔除控制字元。
  1. 使用s/-*//g刪除橫線-----
  2. 使用/^$s/d刪除空行
  3. 使用$d刪除最後一行
  4. 使用1d刪除第一行
  5. 使用awk{print $1}列印第一列

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.