awk 常用技巧

2021-10-10 01:21:00 字數 2364 閱讀 2699

「 awk 一般用於比較規範的檔案處理,是 sed 命令的補充。」

awk 指令碼的流程控制,主要包含三部分,第 1, 3 部分可忽略。

輸入資料前begin{},資料處理前做一些預處理工作。主迴圈{}。所有檔案讀取完成end {}

每行稱作 awk 的記錄,預設使用空格、製表符分開,每個分開的單詞叫做字段。

在 awk 中使用使用$1 $2 ... $n表示每乙個字段($0表示整行)。

可以用-f指定分隔符,分隔符也可以使用正規表示式。

awk -f ',' '' filename
示例:

[/tmp]$ cat a.log

a,b,c,d,e

1,2,3,4

a,2,c

# 正則過濾,然後給每行乙個編號,列印第二列

[/tmp]$ awk -f',' '/^[a-z]/' a.log

0 b1 2

# 更改輸入和輸出分隔符

[/tmp]$ awk 'begin' a.log

a-b-c

1-2-3

a-2-c

# 更改記錄分隔父

[/tmp]$ awk 'begin' a.logab

cde 12

34 a2c

# 顯示行號 fnr 多個檔案會重新計數

[/tmp]$ awk '' a.log

1 a,b,c,d,e

2 1,2,3,4

3 a,2,c

[/tmp]$ awk -f, '' a.log

5 a,b,c,d,e

4 1,2,3,4

3 a,2,c

這裡的條件和迴圈跟程式語言的格式差不多。

語法格式:

if( expression ) statement [ else statement ]
示例:grades.log 中存放的第一列學生名,後面每列是成績。

[/tmp]$ cat grades.log

user0 66 98 89 62 71

user1 63 93 70 93 85

user2 92 92 82 79 91

user3 91 77 83 63 74

user4 88 99 87 99 67

# if 內多個處理語句可以用 {} 括起來

[/tmp]$ awk '' grades.log

user2

user3

user4

條件過濾

# 等同於上面 if

[/tmp]$ awk '$2>80 ' grades.log

user2

user3

user4

[/tmp]$ awk '$2>90 && $3>90' grades.log

user2 92 92 82 79 91

# // 中間是正則

[/tmp]$ awk '$1 ~ /[a-z]+1/ ' grades.log

user1 63 93 70 93 85

while ( expr ) statement

do statement while ( expr )

for ( opt_expr ; opt_expr ; opt_expr ) statement

for ( var in array ) statement

示例:計算 grades.log 中每個學生的總成績和平均成績。

[/tmp]$ awk '' grades.log

user0 386 77.2

user1 404 80.8

user2 436 87.2

user3 388 77.6

user4 440 88

計算所有學生的平均值。

[/tmp]$ awk 'end' grades.log

82.16

這兩個引數主要在寫 shell 指令碼比較常用,比如要給 awk 傳入一些引數。

[/tmp]$ cat arg.awk

begin' grades.log

[/tmp]$ cat 80.log

user1 80.8

user2 87.2

user4 88

推薦閱讀

你所不知道的那些sed命令

awk 使用技巧

倉庫db oracle home dwetl perl script cbs awk begin 1.txt113 3倉庫db oracle home dwetl perl script cbs awk f 1.txt 113 3 fs 設定輸入域分割符 等價於命令列 f選項 預設是tab或者空格 ...

awk 高階技巧

netstat nat awk sort uniq c sort rn netstat n awk tcp end 或 netstat n awk tcp end netstat n awk tcp end netstat n awk tcp sort uniq c sort rn netstat ...

awk實戰3 awk陣列技巧

awk乙個神奇而又強大的功能,絕對是乙個開發利器,效率直選 希望這裡的一些總結能幫到那些存在困惑的人 awk實戰1 基礎語法說明 awk實戰2 流程控制語句總結 awk實戰3 awk陣列技巧 awk實戰4 函式系列 算數函式說明 awk實戰5 函式系列 基本字串函式 awk實戰6 函式系列 字串函式...