[英]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
您可以將awk
與gzat
使用:
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.