我在每个新行中都有一个数字文件: $ 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
请协助。 感谢
答案 0 :(得分:3)
首先解压缩大文件;使用zgrep意味着即时解压缩数字文件的每个行...非常低效。解压缩大文件后,这样做:
for number in `cat test`; do grep $number bigfile > $number.csv; done
要限制整个单词的匹配(例如702119126
与1702119126
不匹配),请在正则表达式中添加单词边界:
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