在循环中grep

时间:2014-04-18 11:43:30

标签: unix grep

我有CVS文件,其中搜索模式和文件名用逗号分隔。我想阅读CVS获取搜索模式和文件并执行grep。我试过但它不起作用。这里的任何指针都会有所帮助。请找到CSV文件(DC2LOGS.csv。

SearchPattern,FilenamewithPath
-116329548,/opt/httpd/logs/apps/atasvc/prod3/was70/atasvc-59596/ata.log
-91756,/opt/httpd/logs/apps/atasvc/prod3/was70/atasvc-59596/ata.log
-86160,/opt/httpd/logs/apps/atasvc/prod3/was70/atasvc-59596/ata.log.1

Grep代码:

 cat DC2Logs.csv | while read a b c d e; do grep  -E "CLAManager.getAttributeFromCLAMapping() took.*$d.*"  < "$e";  done;

提前致谢。

1 个答案:

答案 0 :(得分:2)

我认为你在寻找:

while IFS=, read pattern filename; do 
  grep -e "$pattern" "$filename"; 
done < DC2LOGS.csv

(你肯定希望-e能够防止模式的主要爆发,导致grep将其视为一种选择,并且你是否想要-E取决于你。)

请注意,这将尝试使用第一行(标题),因此您可能需要:

sed -e 1d DC2LOGS.csv | while IFS=, read pattern filename; do
  grep -e "$pattern" "$filename"
done

代替。