我想將一長串數據分成多個變量並輸出到一個文件中。我基本上只是從這一長串數據中挑選和選擇需要的東西。這是我有哪些工作正常。但是對於大型數據文件來說,它的TOO SLOW很慢。讓awk快速分裂
data in out
------------
out="date:21.05.2015#1time:22.00.05#2host:hostname1#3server:managed22#4msg:text_data#5from=system1#6to=system2#7seq=12dfr#8compName=traffic_sys#9type=bus123#10text=message_head,message_body;junkdata"
awk stmt
--------
echo $out | awk '{split ($0, a, "date:");VAR=a[2];split (VAR, a, "#1");date=a[1];VAR=a[2];split (VAR, a, "time:");VAR=a[2];split (VAR, a, "#2");time=a[1];VAR=a[2];split (VAR, a, "host:");VAR=a[2];split (VAR, a, "#3");host=a[1];VAR=a[2];split (VAR, a, "server:");VAR=a[2];split (VAR, a, "#4");server=a[1];VAR=a[2];split (VAR, a, "msg:");VAR=a[2];split (VAR, a, "#5");msg=a[1];VAR=a[2];split (VAR, a, "from=");VAR=a[2];split (VAR, a, "#6");from=a[1];VAR=a[2];split (VAR, a, "to=");VAR=a[2];split (VAR, a, "#7");to=a[1];VAR=a[2];split (VAR, a, "seq=");VAR=a[2];split (VAR, a, "#8");seq=a[1];VAR=a[2];split (VAR, a,"compName=");VAR=a[2];split (VAR, a, "#9");compname=a[1];VAR=a[2];split (VAR, a,"type=");VAR=a[2];split (VAR, a, "#10");type=a[1];VAR=a[2];split (VAR, a, "text:");VAR=a[2];split (VAR, a, ",");text=a[1];OFS="~dlimit~"; outVAR=date " " time;print seq,outVAR,msg,from,to,type,compname,text,host,server,$0 > "prad.out";}'
你能提出一種更快的方法嗎?目前的速度是在29分鐘內處理269K個記錄。謝謝。
這有點寬泛。請嘗試提供[mcve],以便更清楚。另外,如何使用正則表達式匹配組? – fedorqui
[編輯]你的問題,包括簡潔,可測試的樣本輸入(即擺脫所有'...'s)和給定輸入的預期輸出。現在我們可以幫助您編寫最高效的代碼,因爲您尚未向我們展示您想要代碼執行的操作。 –
我認爲,示例源數據很有用。但是你的限制因素可能是文件IO,並沒有太大的幫助。 – Sobrique