我目前的解决方案:
#!/bin/sh
while read file2
do
grep $file2 file1
done
file1的内容将类似于:
atlanta,blue,20090805
newyork,blue,20090805
washington,blue,20090805
dallas,blue,20090805
jacksonville,blue,20090805
file2的内容将类似于:
newyork
dallas
jacksonville
并且文件的所需输出类似于:
newyork,blue,20090805
dallas,blue,20090805
jacksonville,blue,20090805
当根据第二个列表中的名称搜索大型列表的子集时,执行此类操作的最佳方法是什么?任何建议将不胜感激!
谢谢,
答案 0 :(得分:1)
怎么样......
egrep -f file2 file1
对于您的示例案例,它应该像您的循环一样工作;它应该适用于你的口头描述和你的循环所做的相同范围的情况(“第二个列表”文件中每行一个“名称”,即没有egrep
可能曲解的标点符号。) / p>
答案 1 :(得分:0)
这是作弊,因为它是perl,但这是两个单行:
#!/bin/bash
REGEX=`perl -lne 'push(@x,$_);END{print join("|",@x)."\n";}' < file2`
perl -ne 'print $_ if (/\b(?:$ENV{REGEX})\b/o);' < file1
第一行创建一个表单的选项列表:newyork | dallas | jacksonville并将其存储在环境变量REGEX中。 然后第二行将打印任何匹配的行(newyork | dallas | jacksonville)。正则表达式的各个部分:
答案 2 :(得分:0)
$ awk -F"," 'FNR==NR{a[$1]}NR>FNR && ($1 in a)' file2 file1
newyork,blue,20090805
dallas,blue,20090805
jacksonville,blue,20090805