簡體   English   中英

Grep字符串並放入CSV文件Unix

[英]Grep string and put in csv file Unix

我有一些數據的gz文件,現在我想grep兩個不同的模式,並將該數據放入一個csv文件中。同樣,我想編寫一個shell腳本,我們該怎么做,請幫助我。

下面是我要逐行grep然后將其放入csv文件的兩個命令。

命令:

zgrep "Time"  file.txt.gz
zgrep "requests" file.txt.gz

請建議我如何在外殼中使用這些命令並在CSV文件中獲取數據

這是我做完后得到的輸出:

zgrep -E 'Time|requests' file.txt.gz

 Time 27-Apr-2016 07:24:15 CDT,
 requests currently being processed, 1 
  Time 27-Apr-2016 07:24:15 CDT,
 requests currently being processed, 2 ,

我想要類似Time 27-Apr-2016 07:24:15 CDT | requests currently being processed, 1的輸出Time 27-Apr-2016 07:24:15 CDT | requests currently being processed, 1 Time 27-Apr-2016 07:24:15 CDT | requests currently being processed, 1

您可以將awkgzat使用:

gzcat file.txt.gz | awk '/Time/{p=$0} /requests/{print p, "|", $0}'

使用awk格式化它從grep輸出:

zgrep -E ... | awk 'NR%2==0{print l, "|", $0}{l=$0}'
 Time 27-Apr-2016 07:24:15 CDT, |  requests currently being processed, 1 
  Time 27-Apr-2016 07:24:15 CDT, |  requests currently being processed, 2 ,

我假設grep輸出中的'Time ...'和; requests ...'在一行上(沒有像您的示例中那樣包裝)。

zgrep -E 'Time|requests' file.txt.gz | sed -r -e 's/\\s*,\\s*/ | /' > file.csv

要刪除'being processed, 2 ,'中的尾部逗號'being processed, 2 ,'使用此變體

zgrep -E 'Time|requests' file.txt.gz | sed -r -e 's/\\s*,\\s*/ | /; s/\\s*,\\s*$//'

替代方法(不帶grep的純sed):

gzip -dc file.txt.gz | sed -r -e '/Time|requests/!d; s/\\s*,\\s*/ | /; s/\\s*,\\s*$//'

您也可以使用paste操作:

zgrep -E 'Time'     file.txt.gz >f1
zgrep -E 'requests' file.txt.gz >f2

paste f1 f2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM