国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

awk中的字段、記錄和變量

系統 Linux
Awk 有好幾個變種:最早的 awk,是 1977 年 AT&T 貝爾實驗室所創。它還有一些重構版本,例如 mawk、nawk。在大多數 Linux 發行版中能見到的,是 GNU awk,也叫 gawk。在大多數 Linux 發行版中,awk 和 gawk 都是指向 GNU awk 的軟鏈接。

[[283700]]

這個系列的第二篇,我們會學習字段,記錄和一些非常有用的 Awk 變量。

Awk 有好幾個變種:最早的 awk,是 1977 年 AT&T 貝爾實驗室所創。它還有一些重構版本,例如 mawknawk。在大多數 Linux 發行版中能見到的,是 GNU awk,也叫 gawk。在大多數 Linux 發行版中,awkgawk 都是指向 GNU awk 的軟鏈接。輸入 awk,調用的是同一個命令。GNU awk 用戶手冊中,能看到 awkgawk 的全部歷史。

這一系列的第一篇文章 介紹了 awk 命令的基本格式:

  1. $ awk [選項] '模式 {動作}' 輸入文件

awk 是一個命令,后面要接選項 (比如用 -F 來定義字段分隔符)。想讓 awk 執行的部分需要寫在兩個單引號之間,至少在終端中需要這么做。在 awk 命令中,為了進一步強調你想要執行的部分,可以用 -e 選項來突出顯示(但這不是必須的):

  1. $ awk -F, -e '{print $2;}' colours.txt
  2. yellow
  3. blue
  4. green
  5. [...]

記錄和字段

awk 將輸入數據視為一系列記錄,通常是按行分割的。換句話說,awk 將文本中的每一行視作一個記錄。每一記錄包含多個字段。一個字段由字段分隔符分隔開來,字段是記錄的一部分。

默認情況下,awk 將各種空白符,如空格、制表符、換行符等視為分隔符。值得注意的是,在 awk 中,多個空格將被視為一個分隔符。所以下面這行文本有兩個字段:

  1. raspberry red

這行也是:

  1. tuxedo                  black

其他分隔符,在程序中不是這么處理的。假設字段分隔符是逗號,如下所示的記錄,就有三個字段。其中一個字段可能會是 0 個字節(假設這一字段中不包含隱藏字符)

  1. a,,b

awk 程序

awk 命令的程序部分是由一系列規則組成的。通常來說,程序中每個規則占一行(盡管這不是必須的)。每個規則由一個模式,或一個或多個動作組成:

  1. 模式 { 動作 }

在一個規則中,你可以通過定義模式,來確定動作是否會在記錄中執行。模式可以是簡單的比較條件、正則表達式,甚至兩者結合等等。

這個例子中,程序只會顯示包含單詞 “raspberry” 的記錄:

  1. $ awk '/raspberry/ { print $0 }' colours.txt
  2. raspberry red 99

如果沒有文本符合模式,該動作將會應用到所有記錄上。

并且,在一條規則只包含模式時,相當于對整個記錄執行 { print },全部打印出來。

Awk 程序本質上是數據驅動的,命令執行結果取決于數據。所以,與其他編程語言中的程序相比,它還是有些區別的。

NF 變量

每個字段都有指定變量,但針對字段和記錄,也存在一些特殊變量。NF 變量,能存儲 awk 在當前記錄中找到的字段數量。其內容可在屏幕上顯示,也可用于測試。下面例子中的數據,來自上篇文章文本

  1. $ awk '{ print $0 " (" NF ")" }' colours.txt
  2. name       color  amount (3)
  3. apple      red    4 (3)
  4. banana     yellow 6 (3)
  5. [...]

awkprint 函數會接受一系列參數(可以是變量或者字符串),并將它們拼接起來。這就是為什么在這個例子里,每行結尾處,awk 會以一個被括號括起來的整數表示字段數量。

NR 變量

另外,除了統計每個記錄中的字段數,awk 也統計輸入記錄數。記錄數被存儲在變量 NR 中,它的使用方法和其他變量沒有任何區別。例如,為了在每一行開頭顯示行號:

  1. $ awk '{ print NR ": " $0 }' colours.txt
  2. 1: name       color  amount
  3. 2: apple      red    4
  4. 3: banana     yellow 6
  5. 4: raspberry  red    3
  6. 5: grape      purple 10
  7. [...]

注意,寫這個命令時可以不在 print 后的多個參數間添加空格,盡管這樣會降低可讀性:

  1. $ awk '{print NR": "$0}' colours.txt

printf() 函數

為了讓輸出結果時格式更靈活,你可以使用 awkprintf() 函數。 它與 C、Lua、Bash 和其他語言中的 printf 相類似。它也接受以逗號分隔的格式參數。參數列表需要寫在括號里。

  1. $ printf 格式, 項目1, 項目2, ...

格式這一參數(也叫格式符)定義了其他參數如何顯示。這一功能是用格式修飾符實現的。%s 輸出字符,%d 輸出十進制數字。下面的 printf 語句,會在括號內顯示字段數量:

  1. $ awk 'printf "%s (%d)\n",$0,NF}' colours.txt
  2. name       color  amount (3)
  3. raspberry  red    4 (3)
  4. banana     yellow 6 (3)
  5. [...]

在這個例子里,%s (%d) 確定了每一行的輸出格式,$0,NF 定義了插入 %s%d 位置的數據。注意,和 print 函數不同,在沒有明確指令時,輸出不會轉到下一行。出現轉義字符 \n 時才會換行。

Awk 腳本編程

這篇文章中出現的所有 awk 代碼,都在 Bash 終端中執行過。面對更復雜的程序,將命令放在文件(腳本)中會更容易。-f FILE 選項(不要和 -F 弄混了,那個選項用于字段分隔符),可用于指明包含可執行程序的文件。

舉個例子,下面是一個簡單的 awk 腳本。創建一個名為 example1.awk 的文件,包含以下內容:

  1. /^a/ {print "A: " $0}
  2. /^b/ {print "B: " $0}

如果一個文件包含 awk 程序,那么在給文件命名時,最好寫上 .awk 的擴展名。 這樣命名不是強制的,但這么做,會給文件管理器、編輯器(和你)一個關于文件內容的很有用的提示。

執行這一腳本:

  1. $ awk -f example1.awk colours.txt
  2. A: raspberry  red    4
  3. B: banana     yellow 6
  4. A: apple      green  8

一個包含 awk 命令的文件,在最開頭一行加上釋伴 #!,就能變成可執行腳本。創建一個名為 example2.awk 的文件,包含以下內容:

  1. #!/usr/bin/awk -f
  2. #
  3. # 除了第一行,在其他行前顯示行號
  4. #
  5.  
  6. NR > 1 {
  7. printf "%d: %s\n",NR,$0
  8. }

可以說,腳本中只有一行,大多數情況下沒什么用。但在某些情況下,執行一個腳本,比記住,然后打一條命令要容易的多。一個腳本文件,也提供了一個記錄命令具體作用的好機會。以 # 號開頭的行是注釋,awk 會忽略它們。

給文件可執行權限:

  1. $ chmod u+x example2.awk

執行腳本:

  1. $ ./example2.awk colours.txt
  2. 2: apple      red    4
  3. 2: banana     yellow 6
  4. 4: raspberry red    3
  5. 5: grape      purple 10
  6. [...]

awk 命令放在腳本文件中,有一個好處就是,修改和格式化輸出會更容易。在終端中,如果能用一行執行多條 awk 命令,那么輸入多行,才能達到同樣效果,就顯得有些多余了。

試一試

你現在已經足夠了解,awk 是如何執行指令的了。現在你應該能編寫復雜的 awk 程序了。試著編寫一個 awk 腳本,它需要: 至少包括一個條件模式,以及多個規則。如果你想使用除 printprintf 以外的函數,可以參考在線 gawk 手冊

下面這個例子是個很好的切入點:

  1. #!/usr/bin/awk -f
  2. #
  3. # 顯示所有記錄 除了出現以下情況
  4. # 如果第一個記錄 包含 raspberry
  5. # red 替換成 pi
  6.  
  7. $1 == "raspberry" {
  8.         gsub(/red/,"pi")
  9. }
  10.  
  11. { print }

試著執行這個腳本,看看輸出是什么。接下來就看你自己的了。

這一系列的下一篇文章,將會介紹更多,能在更復雜(更有用!) 腳本中使用的函數。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-03-04 15:11:06

Ubuntu awk

2016-08-10 16:07:08

awkLinux開源

2010-05-11 10:43:10

Unix awk

2016-08-11 09:18:33

awkShellLinux

2016-08-10 11:19:11

awkLinux開源

2017-08-04 14:00:32

Linuxawk變量

2024-11-06 17:04:47

AWK編程

2010-09-03 15:21:46

SQLselect語句

2016-08-29 20:51:16

awkLinux開源

2010-05-11 13:16:21

Unix awk

2019-12-03 10:00:19

awkLinux循環

2011-03-29 13:22:07

SQL Server臨時表表變量

2023-12-10 21:35:45

Linux服務器日志分析

2019-12-12 18:00:54

awkLinux開源

2023-11-30 12:03:06

linuxAwk

2012-05-18 12:49:43

Android

2010-11-23 15:27:00

MySQL添加字段

2013-07-31 11:09:05

C++11

2023-10-26 15:49:53

Go日志

2010-05-11 12:17:51

Unix awk
點贊
收藏

51CTO技術棧公眾號

18岁网站在线观看| www.大网伊人| 国产精品玖玖玖在线资源| av男人天堂一区| 国产综合动作在线观看| 高潮久久久久久久久久久久久久 | 91麻豆精品一区二区三区| 国产一区红桃视频| 欧美国产高潮xxxx1819| 欧美理论片在线观看| 成人综合日日夜夜| 欧美日韩不卡一区| jizz一区二区三区| 色婷婷av一区| 亚洲xxxxxx| 91精品黄色片免费大全| 亚洲精品大全| 欧美区在线播放| 91cn在线观看| 欧美浪妇xxxx高跟鞋交| 中文字幕网站视频在线| 中文av字幕一区| 色影院视频在线| www亚洲欧美| 国产精品视区| 国产igao激情在线入口| 亚洲激情视频在线| 国产一区二区三区日韩精品| 日本天堂免费a| 欧美这里有精品| 91麻豆一二三四在线| 国产精品激情av电影在线观看| 亚洲美女黄色| 99热播在线观看| 影院免费视频| 亚洲精品一区二区三区香蕉| 精品久久中文| 色偷偷亚洲女人天堂观看欧| 国产亚洲成av人片在线观看桃| 欧美一区二区性| 国产91porn| 在线观看成人免费视频| 婷婷色综合网| 国产福利电影在线观看| 91干在线观看| 国产日产欧美一区| 国产精品蜜臀| 91精品在线观看视频| 国产精品乱人伦| 国产精品诱惑| 中文字幕久久一区| 欧美亚洲尤物久久| 妖精视频成人观看www| 九色蝌蚪在线| 国产在线精品播放| 欧美视频第一页| 99久久婷婷这里只有精品| 最新天堂资源在线资源| 日韩av123| 色综合中文综合网| 久久精品国产www456c0m| 欧在线一二三四区| 69精品小视频| |精品福利一区二区三区| 成人1区2区| 亚洲精品视频导航| 久久99久久久久久久噜噜| 亚洲免费电影在线| 国产精品亚洲欧美一级在线| 性一交一乱一伧国产女士spa| 亚洲区在线播放| av中文字幕亚洲| 欧美在线色图| а√天堂资源地址在线下载| www.欧美黄色| 亚洲日本中文字幕| 国产欧美一区二区精品性| 日韩av影院| 3d动漫成人在线| 国产伦精品免费视频| 国产精品入口麻豆九色| 日韩精品免费一区二区三区| www在线免费观看视频| 国产精品一区二区免费在线观看| 久热99视频在线观看| 一区二区三区在线视频观看58| 欧美 日韩 国产 一区| 香蕉视频在线播放| 大j8黑人w巨大888a片| 国产精品亚洲аv天堂网| 伊人久久大香线蕉av不卡| 成人在线高清免费| 国产男女在线观看| 97人摸人人澡人人人超一碰| 亚洲午夜未删减在线观看| 亚洲老司机在线| 国产一区二区三区在线观看免费视频| 一区二区精彩视频| 91在线视频| 日本视频一区二区在线观看| 亚洲裸体xxxx| 在线视频你懂得一区| 成人综合婷婷国产精品久久免费| 少妇精品久久久一区二区| 中文字幕在线播放网址| 国语对白在线视频| 男女啪啪免费视频网站| 欧洲一区二区日韩在线视频观看免费| 久久久精品国产| 日韩精品一二三四区| 一本久久精品一区二区| 2024国产精品| 美国一区二区三区在线播放| 999精品视频| av在线日韩| 免费黄网站在线播放| 手机亚洲第一页| av在线无限看| 女女同性女同一区二区三区91| 久久久久久91香蕉国产| 欧美亚日韩国产aⅴ精品中极品| 99久久免费视频.com| 国产99一区视频免费| 中日韩男男gay无套| 国产精品一区二区三区美女| 男女在线观看视频| 三级成人黄色影院| 只有这里有精品| 国产精品私房写真福利视频| 99tv成人| heyzo高清国产精品| 国产原创中文在线观看 | 日韩中文一区| 日韩在线观看免费全集电视剧网站| 精品91视频| 亚洲国产尤物| 国产精品亚洲一区二区三区在线观看 | 亚洲乱码一区二区三区 | 少妇视频在线观看| av在线不卡免费| 日韩一区二区三区免费看| 青青青草视频在线| 国产理论在线| 精品国产亚洲一区二区三区大结局| 亚洲第一二三区| 精品国产一区二区三区性色av| av在线1区2区| 欧洲亚洲两性| 日韩av有码| 捆绑调教美女网站视频一区| 久久久久国产精品麻豆| 色综合久久66| xvideos亚洲| 亚洲一区二区中文| 国产综合欧美在线看| 日韩video| 中文字幕在线观看第一页| 免费高清在线观看免费| 免费激情视频在线观看| 国产在线日本| 小草av在线播放| 国产在线观看黄| 四虎影视国产精品| 久久国产精品毛片| 2014亚洲片线观看视频免费| 色哟哟在线观看一区二区三区| 国产亚洲综合久久| 国产精品青青草| 激情网站五月天| 小黄鸭精品aⅴ导航网站入口| 久久综合色占| 国产精品免费丝袜| 精品久久久精品| 久久久伊人日本| 96pao国产成视频永久免费| 日本婷婷久久久久久久久一区二区| 国产香蕉尹人视频在线| sm国产在线调教视频| 国产成人ay| 国产欧美日韩一区二区三区在线观看| 亚洲永久精品大片| 91av视频在线观看| 成人在线播放网站| av播放在线| 亚洲国产欧美国产综合一区| 婷婷综合五月天| 国产精品jvid在线观看蜜臀| 99热在线看| 欧美一区二区性| 一区二区三区精品视频| 国产精品爽爽爽爽爽爽在线观看| 69国产精品视频| 亚洲福利网站| 亚洲成人av资源| 久久黄色级2电影| 91国内精品| 久久99久国产精品黄毛片色诱| 日韩欧美电影一二三| 国产精品啪啪啪视频| 日本亚州欧洲精品不卡|