萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux如何使用文本處理工具awk

Linux如何使用文本處理工具awk

  awk是Linux中的文本處理工具,類似於shell編程語言,擁有屬於自己的語言,下面小編就給大家介紹下Linux中awk文本處理工具的用法,感興趣的朋友可以來了解一下。

 Linux如何使用文本處理工具awk
 

  調用方式

  1.命令行

  awk [-F field-separator] ‘commands’ input-file(s)

  commands是真正awk命令,[-F域分隔符]是可選的。input-file(s) 是待處理的文件。在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,默認的域分隔符是空格(或者tab)。

  2.shell腳本方式

  將所有的awk命令插入一個文件,並使awk程序可執行,然後awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調用。相當於shell腳本首行的:#!/bin/sh 可以換成:#!/bin/awk -f

  3.將所有的awk命令插入一個單獨文件,然後調用:awk -f awk-script-file input-file(s)其中,-f選項加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。

  內置變量

  ARGC:命令行參數個數

  ARGV:命令行參數排列

  ENVIRON:UNIX環境變量

  ERRNO:UNIX系統錯誤消息

  FILENAME:awk浏覽的文件名

  OFMT:數字的輸出格式 %.6g

  FNR:浏覽文件的記錄數

  FS:設置輸入域分隔符,等價於命令行 -F選項

  NF:浏覽記錄的域的個數

  NR:已讀的記錄數,就是行號,從1開始

  FNR:當前記錄數

  OFS:輸出域分隔符

  ORS:輸出記錄分隔符

  RS:控制記錄分隔符

  $0:當前記錄(作為單個變量)

  $1~$n:當前記錄的第n個字段,字段間由FS分隔

  輸出函數

  print:參數可以是變量、數值或者字符串。字符串必須用雙引號引用,參數用逗號分隔。如果沒有逗號,參數就串聯在一起而無法區分。這裡,逗號的作用與輸出文件的分隔符的作用是一樣的,只是後者是空格而已

  printf:其用法和c語言中printf基本相似,可以格式化字符串,輸出復雜時,printf更加好用,代碼更易懂。具體格式如下:

  %d 十進制有符號整數

  %u 十進制無符號整數

  %f 浮點數

  %s 字符串

  %c 單個字符

  %p 指針的值

  %e 指數形式的浮點數

  %x %X 無符號以十六進制表示的整數

  %o 無符號以八進制表示的整數

  %g 自動選擇合適的表示法

  獲取外部變量

  1.獲取普通外部變量

  awk ‘{action}’ 變量名=變量值

  2.BEGIN程序塊中變量

  awk –v 變量名=變量值 [–v 變量2=值2 …] ‘BEGIN{action}’

  3.環境變量

  需要用到內置變量ENVIRON實現

上一頁123456下一頁共6頁

  運算符

  1.賦值運算符

  = += -= *= /= %= ^= **=

  2.邏輯運算符

  ||:邏輯或

  &&:邏輯與

  3.正則運算符

  ~:匹配正則表達式

  ~!:不匹配正則表達式

  4.關系運算符

  《 《= 》 》= != ==

  5.算術運算符

  + - * / & ++ --

  6.其它運算符

  $:字段引用

  空格:字符串連接符

  ?:C條件表達式

  in:數組中是否存在某鍵值

  字符操作

  1.字符串轉數字

  將變量通過”+”連接運算。自動強制將字符串轉為整型。非數字變成0,發現第一個非數字字符,後面自動忽略

  2.數字轉字符串

  只需要將變量與””符號連接起來運算即可

  3.字符串連接

  只需要將變量與””符號連接起來運算即可

  數組操作

  在awk中數組叫做關聯數組,因為下標既可以是數也可以是串。awk中的數組不必提前聲明,也不必聲明大小。數組元素用0或空串來初始化,這根據上下文而定。需要注意的是不同版本下面函數不一定相同。其相關的函數有length、asort、delete、split。當然也可以實現多維數組。

  流程控制語句

  1.條件判斷語句(if)

  if(表達式){語句1}else{語句2}

  if(表達式){語句1}else if(表達式){語句2}else{語句3}

  2.循環語句(while、for、do while)

  while(表達式){語句}

  for(變量 in 數組){語句}

  for(變量;條件;表達式){語句}

  do{語句}while(條件)

  3.關鍵字

  break:當break語句用於while或for語句時,導致退出程序循環。

  continue:當continue語句用於while或for語句時,使程序循環移動到下一個迭代。

  next:能能夠導致讀入下一個輸入行,並返回到腳本的頂部。這可以避免對當前輸入行執行其他的操作過程。

  exit:語句使主輸入循環退出並將控制轉移到END,如果END存在的話。如果沒有定義END規則,或在END中應用exit語句,則終止腳本的執行。

  正則表達式

  +:包含一個或多個字符或擴展正則表達式的具體值(在 +(加號)前)在這個字符串中,則字符串匹配。命令行:awk ’/smith+ern/‘ testfile

  ?:包含零個或一個字符或擴展正則表達式的具體值(在 ?(問號)之前)在字符串中,則字符串匹配。命令行:awk ’/smith?/‘ testfile

  |:以 |(垂直線)隔開的字符串的任何一個在字符串中,則字符串匹配。命令行:awk ’/allen | alan /‘ testfile

  ():在正則表達式中將字符串組合在一起。命令行:awk ’/a(ll)?/‘ testfile

  {m}:有m個模式的具體值位於字符串中,則字符串匹配。命令行:awk ’/l{2}/‘ testfile

  {m,}:至少m個模式的具體值在字符串中,則字符串匹配。命令行:awk ’/t{2,}/‘ testfile

  {m, n}:在m和n之間(包含的m和n)個模式的具體值在字符串中(其中m 《= n),則字符串匹配。命令行:awk ’/er{1, 2}/‘ testfile

  [String]:正則表達式與方括號內String變量指定的任何字符匹配。命令行:awk ’/sm[a-h]/‘ testfile

  [^ String]:在 [ ](方括號)和在指定字符串開頭的 ^ (插入記號) 指明正則表達式與方括號內的任何字符不匹配。這樣,命令行:awk ’/sm[^a-h]/‘ testfile

  ~,!~:表示指定變量與正則表達式匹配或不匹配的條件語句。命令行:awk ’$1 ~ /n/‘ testfile

  ^:指定字段或記錄的開頭。命令行:awk ’$2 ~ /^h/‘ testfile

  $:指定字段或記錄的末尾。命令行:awk ’$2 ~ /y$/‘ testfile

  。:表示除了在空白末尾的終端換行字符以外的任何一個字符。命令行:awk ’/a..e/‘ testfile

  \ :轉義字符。當位於在擴展正則表達式中具有特殊含義的任何字符之前時,轉義字符除去該字符的任何特殊含義。例如,命令行:/a\/\//

上一頁12 3456下一頁共6頁

  內置函數

  1.算術函數

  atan2( y, x ) 返回 y/x 的反正切。

  cos( x ) 返回 x 的余弦;x 是弧度。

  sin( x ) 返回 x 的正弦;x 是弧度。

  exp( x ) 返回 x 冪函數。

  log( x ) 返回 x 的自然對數。

  sqrt( x ) 返回 x 平方根。

  int( x ) 返回 x 的截斷至整數的值。

  rand( ) 返回任意數字 n,其中 0 《= n 《 1。

  srand( [Expr] ) 將 rand 函數的種子值設置為 Expr 參數的值,或如果省略 Expr 參數則使用某天的時間。返回先前的種子值。

  2.字符串函數

  gsub( Ere, Repl, [ In ] ) 除了正則表達式所有具體值被替代這點,它和 sub 函數完全一樣地執行,。

  sub( Ere, Repl, [ In ] ) 用 Repl 參數指定的字符串替換 In 參數指定的字符串中的由 Ere 參數指定的擴展正則表達式的第一個具體值。sub 函數返回替換的數量。出現在 Repl 參數指定的

copyright © 萬盛學電腦網 all rights reserved