繁体   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