在文件中搜索模式,并使用awk,sed将每个模式结果输出到自己的文件中

时间:2011-10-25 09:00:03

标签: shell sed awk

我在每个新行中都有一个数字文件: $ cat test

700320947
700509217
701113187
701435748
701435889
701667717
701668467
702119126
702306577
702914910

我想从另一个较大的文件中搜索具有几个逗号分隔字段的详细信息,并将结果输入

700320947.csv
700509217.csv
701113187.csv
701435748.csv
701435889.csv
701667717.csv
701668467.csv
702119126.csv
702306577.csv
702914910.csv

逻辑:

ls test | while read file; do zgrep $line *large*file*gz >> $line.csv ; done

请协助。 感谢

2 个答案:

答案 0 :(得分:3)

首先解压缩大文件;使用zgrep意味着即时解压缩数字文件的每个行...非常低效。解压缩大文件后,这样做:

for number in `cat test`; do grep $number bigfile > $number.csv; done

编辑:

要限制整个单词的匹配(例如7021191261702119126不匹配),请在正则表达式中添加单词边界:

for number in `cat test`; do grep \\b$number\\b bigfile > $number.csv; done

答案 1 :(得分:3)

由于没有说出大文件的结构,我只是假设测试中的数字可以在大文件的第二列中找到;根据需要概括。

这可以通过在awk中使用输出重定向一次遍历每个文件来完成:

awk -F"," 'FILENAME == "test" { num[$1]=1; next } 
  num[$2] { print > $2".csv" }' test bigfile