awk之二次分隔函式
awk指令碼中,可以按照指定的字元作為分隔符來實現對字串的分割。
如現有如下字串:
[02/Mar/2009:12:28:32 +0800] conn=24294969 p=29 SRCH base="PPVId=571788280,cn=PPVContent,l=ipauth,dc=iptv,dc=com" scope=0 filter="(objectclass=*)"
現在要實現對字串的擷取,取方括號[]中的時間字串,並列印出來。
擷取方式是先以]作為分隔符,將前面一段字串取出來,即有:
[02/Mar/2009:12:28:32 +0800
我只想取前面的日期和時間,不要+0800和[,於是進行substr擷取第二個開始2長為20的字串。
然後我還再將]右邊的字串也列印出來。
指令碼如下:
awk -F']' "{print substr($1,1,20) $2;}"
現在我又想在字串$2中,獲取引號(")中的PPVId的這串內容,而我又不想在另外一個awk中實現。於是就可以用split函式來實現這個功能:
split(srcstr, array, field seporator)
srcstr是指要分割的字串,array是指賦予的變數,field seporator是指分割字元。
於是就有:
awk -F"]" "{split($2,keystr,\");print substr($1,1,20) keystr[2]; }"
理論上講上面語句應該可以實現,但是由於"是個特殊字元,所以在shell環境中解釋會有問題。所以只能放到指令碼中了。
下面這個指令碼是為分析資料而編寫的一個指令碼,裡面是將那段語句組裝成SQL語句。(然後可以讓sqlplus可以插入到Oracle中,分析起來比較方便)
#!/bin/awk -f
BEGIN{
FS="]";
sqlhead="insert into w_ldap_analyze(srch_time, srch_str) values(";
iter=1;
}
{
split($2,bstr,"\"");
print sqlhead "to_date('" substr($1,2,20) "', 'dd/mon/yyyy:hh24:mi:ss'),'" bstr[2] "');";
if(iter==5000){
print "commit;";
iter = 1;
}
iter++;
}
END{
print "commit;";
}
由於預設的Oracle可能是中文環境,所以首先還是要將進行資料插入的session改成英文的環境:
alter session set nls_date_language='american';
一個不錯的學習地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-558298/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- awk多分隔符操作
- awk內建函式函式
- 千分位分隔函式函式
- ORACLE單行函式與多行函式之二:字元函式示例Oracle函式字元
- [MSSQL]固定長度新增分隔符函式SQL函式
- awk命令如何對兩列加分隔符
- linux之shell awk 之二Linux
- awk基礎04-內建函式函式
- awk之隨機函式rand()和srand()隨機函式
- AWK高階之內部函式使用函式
- OpenFaaS實戰之二:函式入門函式
- 《JavaScript物件導向精要》之二:函式JavaScript物件函式
- 教你認識AWK 使用者自定義函式函式
- Oracle自定義函式---按照某個分隔符拆分字串Oracle函式字串
- JPlayer使用之二,主要函式介紹函式
- Windows未公開函式揭密——之二 (轉)Windows函式
- awk基礎05-自定義函式和指令碼函式指令碼
- php列印負載函式、Linux awk列印負載PHP負載函式Linux
- java基礎之二:取整函式(Math類)Java函式
- Linux Awk 內建函式詳細介紹(例項)Linux函式
- JavaScript物件導向之二(建構函式繼承)JavaScript物件函式繼承
- Flink處理函式實戰之二:ProcessFunction類函式Function
- Java 8怎麼了之二:函式和原語Java函式
- awk學習筆記(15)-數學函式及隨機數筆記函式隨機
- 【轉】linux下awk內建函式的使用(split/substr/length)Linux函式
- 遞迴函式、演算法之二分法、三元表示式、各種生成式、匿名函式遞迴函式演算法
- Jmeter二次開發——自定義函式JMeter函式
- echo二次開發 ecshop 函式列表函式
- U417343二次函式題解函式
- sqlldr+awk+shell的一次記錄SQL
- awk統計訪問nginx日誌次數Nginx
- 在JS中統計函式執行次數JS函式
- 三次函式的對稱中心問題函式
- WordPress主題模板層次和常用模板函式函式
- Jmeter二次開發函式 - 文字替換JMeter函式
- delphi 中分隔符分隔的字串字串
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串