2017-04-24 52 views
-2

有10GB的大日誌文件,並格式化獨特的價值如下:高效的方式來獲得從日誌文件中

node123`1493000000`POST /api/info`app_id=123&token=123&sign=abc 
node456`1493000000`POST /api/info`app_id=456&token=456&sign=abc 
node456`1493000000`POST /api/info`token=456&app_id=456&sign=abc 
node456`1493000000`POST /api/info`token=456&sign=abc&app_id=456 

現在我想從日誌文件中唯一app_ids。例如,日誌文件的預期效果上面應該是:

123 
456 

我做到這一點與shell腳本awk -F 'app_id=' '{print $2}' $filename | awk -F '&' '{print $1}' | sort | uniq,以及有沒有更有效的方法?

+0

你的意思是獲取'app_id = 123'還是包含'app_id'的整行? – dawg

+1

您的示例非常糟糕,您需要唯一的輸出,但不會在目標輸入值中顯示任何嘟嘟聲,並且您在每行上多次使用相同的值。最終的結果是,我們可以針對您的示例輸入運行腳本,這是完全錯誤的,它會產生與腳本相同的輸出,並且最終您根本沒有向我們展示任何預期的輸出,所以它們都只是無論如何猜測工作!閱讀[問],然後用[mcve]再次嘗試,其中包含簡明,可測試的採樣輸入和預期輸出。 –

回答

0

如果你的日誌文件的名稱是log_file.txt,你可以使用以下命令:

  1. grep -Po "(?<=&app_id=)[0-9]+" log_file.txt

  2. awk -F "[&=]" '{print $4}' log_file.txt

0

更改日誌文件名

awk '{print $17" "$18" "$19" "$20}' log.txt |sort -k1|uniq >> z #apache 
    # filename on line number(0-9) awk result 
    while read x; 
    do 
    echo $x 
    grep "$x" log.txt | wc -l 
    done < z 
相關問題