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

2021-09-25 10:46:14 字數 2213 閱讀 4312

在linux下開發,因為經常需要分析專案的日誌檔案,以此來查詢軟體功能可能的異常點,經同事的介紹慢慢接觸了linux下的三大利器:grep,sed,awk,特通過以下例子來總結下自己的學習結果;

從文字檔案內篩選出起始點座標和結束點座標,並將此結果資料構造sql語句,最後使用sql將資料插入到對應表中;

操作步驟大體如下:

a.篩選出座標資訊;

b.過濾資料:包括刪除重複行,去掉異常資料;

c.構造sql語句;

d.匯入;

a.檔名為combine.log,其內容如下圖所示

需要將其中的座標資訊如(2375.40,-25.200),(2375.40,-6.200)資料給篩選出來;

b.篩選出座標資料,我們先篩選出包含座標的資料:

$cat combine.log | awk '' | more
執行以上命令後的結果如下圖所示:

ps:根據觀察a中的資料,可知座標資料都在第6列裡,通過awk的$6,將這一列資料提出來並輸出到管道,將其作為下一步需要處理的資料**;

c.利用awk按空格識別列的策略,對資料進行如下處理:

1)將逗號(,)替換為空格,使用sed進行處理;語句如下

$sed 's/\,/\ /g'
2)過濾掉其中重複的行;語句如下:

$awk '!a[$0]++'
3)去掉其中座標列資料異常值為「-nan」的資料;語句如下:

awk '$3!="-nan" '
比對未處理和處理後的資料記錄數:

沒有過濾之前,篩選出的記錄數,如下圖所示:

通過增加篩選條件後的記錄數,如下圖所示:

執行如下篩選語句

cat combine.log | awk '' | sed 's/\,/\ /g' | awk '!a[$0]++' | awk '$3!="-nan" ' | more
結果如下圖所示:

d.獲取座標資料並進行簡單處理,以便後續構造sql語句;

1)獲取資料,將第3,4列和第9,10列資料篩選出來;

awk ''
2)將座標拼成形如(x,y)的字串;

awk ''
檢視如下命令檢視篩選後的結果:

cat combine.log | awk '' | sed 's/\,/\ /g' | awk '!a[$0]++' | awk '$3!="-nan" ' |awk ''| awk ''| more
資料如下圖所示:

e.構造sql語句,並將結果儲存到檔案;

awk ''
執行以下完整語句:

cat combine.log | awk '' | sed 's/\,/\ /g' | awk '!a[$0]++' | awk '$3!="-nan" ' |awk ''| awk ''| awk '' > combine.sql
檢視conbine.sql的內容,如下圖所示:

使用生成的combine.sql在資料庫內執行後的結果,如下圖所示:

a.使用awk可以非常簡答的刪除篩選資料內的重複行;

b.使用awk的printf函式將座標資料組成想要的字串;

c.使用sed進行字元的查詢替換;

d.利用awk按空格分隔資料的方式,進行資料的獲取;

使用awk進行文字處理

有過大文字處理經歷的朋友一定都知道awk,這是一種指令碼語言,對於處理一定格式的資料還是很方便使用的。下面介紹一下awk的常用方法。如果想系統學習,請看 1 awk的內建變數 awk 所內建的字段變數及其涵意如下 字段變數 含義 0 一字串,其內容為目前 awk 所讀入的資料行.1 0 上第乙個欄位...

awk進行文字處理

1 awk的內建變數 awk 所內建的字段變數及其涵意如下 字段變數 含義 0 一字串,其內容為目前 awk 所讀入的資料行.1 0 上第乙個欄位的資料.2 0 上第二個欄位的資料.其餘類推 內建變數 含義nf number of fields 為一整數,其值表 0上所存在的字段數目.nr numb...

文字處理awk

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