Linux awk 命令總結

2021-10-01 15:41:43 字數 2966 閱讀 5195

一.基本介紹

1.awk:

awk是乙個強大的文字分析工具,在對文字檔案的處理以及生成報表,awk是無可替代的。awk認為文字檔案都是結構化的,它將每乙個輸入行定義為乙個記錄,行中的每個字串定義為乙個域(段),域和域之間使用分割符分割。

2.功能:流控制、數**算、程序控制、內建的變數和函式、迴圈和判斷

3.工作原理:

awk 會把每行進行乙個拆分,用相應的命令對拆分出來的「段」進行處理。

(1)行工作模式,讀入檔案的每一行,會把一行的內容,存到$0裡

(2)使用內建的變數fs(段的分隔符,預設用的是空白字元),分割這一行,把分割出來的每個段存到相應的變數$(1-100)

(3)輸出的時候按照內建變數ofs(out fs),輸出

(4)讀入下一行繼續操作

簡單例項

1 [root@tx3 ~]# echo "this is a book" > awk.txt

2 [root@tx3 ~]# awk '' awk.txt

is this a book

4. awk常用內建變數表:

1 $0 當前記錄(作為單個變數)

2 $1~$n 當前記錄的第n個字段,欄位間由fs分隔

3 fs 輸入字段分隔符 預設是空格 (可記憶為:fieldsspace縮寫)

4 nf 當前記錄中的字段個數,就是有多少列 (可記憶為:numberfields縮寫)

5 nr 已經讀出的記錄數,就是行號,從1開始 (可記憶為:numberrows縮寫)

6 rs 輸入的記錄他隔符默 認為換行符 (可記憶為:rowsspace縮寫)

7 ofs 輸出字段分隔符 預設也是空格 (可記憶為:outputfieldsspace縮寫)

8 ors 輸出的記錄分隔符,預設為換行符 (可記憶為:outputrowsspace縮寫) 

9 argc 命令列引數個數

10 ar** 命令列引數陣列

11 filename 當前輸入檔案的名字

12 ignorecase 如果為真,則進行忽略大小寫的匹配

13 argind 當前被處理檔案的ar**標誌符

14 convfmt 數字轉換格式 %.6g

15 environ unix環境變數

16 errno unix系統錯誤訊息

17 fieldwidths 輸入字段寬度的空白分隔字串

18 fnr 當前記錄數

19 ofmt 數字的輸出格式 %.6g

20 rstart 被匹配函式匹配的字串首

21 rlength 被匹配函式匹配的字串長度

二.print的簡單使用

例:列印整行: $0

1 [root@tx3 ~]# cp /etc/passwd p1

2 [root@tx3 ~]# awk '' p1

例:列印每行的最後乙個字段: $nf

1 [root@tx3 ~]# awk -f : '' p1
例:列印第三個字段: $3

[root@tx3 ~]# awk -f : '' p1
例:列印第一行nr==1

1 [root@tx3 ~]# awk 'nr==1' p1

root:x:0:0:root:/root:/bin/bash

例:列印最後一行

1 [root@tx3 ~]# awk 'end' p1

tx:x:500:500:tx:/home/tx:/bin/bash

例:列印第一行最後乙個字段

1 [root@tx3 ~]# awk -f: 'nr==1' p1

/bin/bash

例:列印最後一行最後乙個字段

1 [root@tx3 ~]#awk -f: 'end' p1
例:列印每行的倒數第二個字段,並在其後列印你好

1 [root@tx3 ~]# awk -f: '' p1

/root nihao

/bin nihao

/sbin nihao

例:列印行號

1 [root@tx3 ~]# awk '' p1

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

例:列印當前系統環境變數的某個特定值

1 [root@tx3 ~]# awk 'begin'

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

例: 用:分割,刪除第2個字段

1 [root@tx3 ~]# awk 'begin' p1

root:0:0:root:/root:/bin/bash

bin:1:1:bin:/bin:/sbin/nologin

daemon:2:2:daemon:/sbin:/sbin/nologin

begin和end:(列印報表例項)

在unix awk中兩個特別的表示式,begin和end,這兩者都可用於pattern中(參考前面的awk語法),提供begin和end的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。

任何在begin之後列出的操作(在{}內)將在unix awk開始掃瞄輸入之前執行,而end之後列出的操作將在掃瞄完全部的輸入之後執行。因此,通常使用begin來顯示變數和預置(初始化)變數,使用end來輸出最終結果。

例:累計銷售檔案xs中的銷售金額(假設銷售金額在記錄的第三字段):

1 [root@tx3 ~]#awk 'beginend' sx
在這裡,begin預置了內部變數fs(字段分隔符)和自定義變數total,同時在掃瞄之前顯示出輸出行頭。而end則在掃瞄完成後列印出總合計

Linux awk命令詳解

3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...

linux awk命令學習

awk是一種功能很強大的程式語言,用於linux系統下文字和資料的處理。本篇文章只學習一些awk相關的常規應用,而不對awk的語法進行討論,如果有需要,直接查資料就好了。1.檢視特定程序的pid,sh ps pid tty time cmd 414 00 00 00 rcs 417 00 00 00...

linux awk命令詳解

awk 儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 awk 在資料中查詢的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號 不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。pattern就是要表示的正規表示式,用斜槓括起來。awk 語言...