在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...