使用awk處理文字

2022-07-02 18:54:11 字數 1841 閱讀 4176

在liux下我們經常需要對一些文字文件做一些處理,尤其像從日誌裡提取一些資料,這是我們一般會用awk工具和sed工具去實現需求,這裡對awk的入門使用簡單記錄。

awk可以看作一種文字處理工具,一種專注資料操作的程式語言,乙個資料處理引擎。其名字**於三個發明者的姓名首字母。一般在liux下使用的awk是gawk(gnu awk)。

awk把文字文件看作是資料庫,每一行看作一條資料庫中的記錄,可以指定資料列的分隔符,預設的分隔符是」\t」,即tab。

awk工作流程是這樣的:讀入有』\n』換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第乙個域,$n表示第n個域。預設域分隔符是」空白鍵」 或 「[tab]鍵」

awk的執行模式是:awk ''

awk的執行方式:

1.命令列方式

awk [-f  field-separator]  'commands'  input-file(s)

其中,commands 是真正awk命令,[-f域分隔符]是可選的。 input-file(s) 是待處理的檔案。

在awk中,檔案的每一行中,由域分隔符分開的每一項稱為乙個域。通常,在不指名-f域分隔符的情況下,預設的域分隔符是空格。

2.shell指令碼方式

將所有的awk命令插入乙個檔案,並使awk程式可執行,然後awk命令直譯器作為指令碼的首行,一遍通過鍵入指令碼名稱來呼叫。

相當於shell指令碼首行的:#!/bin/sh

可以換成:#!/bin/awk

3.將所有的awk命令插入乙個單獨檔案,然後呼叫:

awk -f awk-script-file input-file(s)

其中,-f選項載入awk-script-file中的awk指令碼,input-file(s)跟上面的是一樣的。

一般是喲你哦個命令列模式就能滿足需求了。

這樣下面的一行文字:

abc def 123

dfg jik 234

在awk看來就是乙個包含三個欄位的記錄,可以模擬到mysql的一行記錄,只不過awk沒有乙個mysql那麼強的scheme。

這樣比如我們要抽出中間的那一行資料,假設文字儲存為檔案 data.txt

awk ''

很簡單,這樣就可以列印出中間的字元def 和jik 了。

下面來乙個點點複雜的:

beth	4.00	0

dan 3.75 0

kathy 4.00 10

mark 5.00 20

mary 5.50 22

susie 4.25 18

對於這樣的資料

使用awk '$3>0 ' data.txt這樣會輸出

kathy 40

mark 100

mary 121

susie 76.5

理解就是可以在{}前面新增乙個判斷的語句,只有符合條件的行才會執行後面的語句。

相對於print輸出,可以使用printf進行格式化輸出:

awk  -f ':'  '' /etc/passwd

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

printf函式,其用法和c語言中printf基本相似,可以格式化字串,輸出複雜時,printf更加好用,**更易懂。

使用awk處理帶標籤文字

使用awk處理帶標籤文字 假設有 123abc456def789ghi 這麼乙個字串 題中的字串,要擷取長度5,則返回的字串應該為 123ab,要擷取長度8,應返回123abc45。附 1 和標記不得計算在長度之內。2 擷取後的字串,要保留原有標籤,不過如果最後有乙個標籤沒有閉合,則去掉其開始標籤。...

awk筆記 使用awk進行文字處理

在linux下開發,因為經常需要分析專案的日誌檔案,以此來查詢軟體功能可能的異常點,經同事的介紹慢慢接觸了linux下的三大利器 grep,sed,awk,特通過以下例子來總結下自己的學習結果 從文字檔案內篩選出起始點座標和結束點座標,並將此結果資料構造sql語句,最後使用sql將資料插入到對應表中...

文字處理awk

awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。實際上awk確實有自己的程式語言 樣式掃瞄和處理語言。awk 1.命令列方式 awk f...