grep 从包含模式列表的文件中搜索模式,将每个模式的结果写入各个文件

grep 从包含模式列表的文件中搜索模式,将每个模式的结果写入各个文件

我有一个包含该月每日 CD 的目录。我需要在所有 CD 中搜索 ph 值列表,并将结果写入每个模式的单独文件中。

目前,我正在手动对包含每月 cd 的目录中的每个 ph 值使用以下命令,并将每个数字的结果写入单个文件。

grep -rn 111222333 /dir-containing-new-indivdual-logs/111222333.csv

我尝试添加grep -f选项来指定搜索列表,但没有成功,因为整个命令的语法是错误的。

答案1

如果您宁愿继续使用 grep,请考虑这个循环

nums=/path/to/the/file_with_numbers_one_per_line
wdir=/path/to/dir/where/records2searchIn/located
rdir=/path/to/dir/to/put/results

for anum in $(cat ${nums}); do
 grep -nr "${anum}" ${wdir} > ${rdir}/result_file_for_${anum}; 
done

对列表中的每个数字进行 grep 并保存单个结果

答案2

用于awk此。

awk 'NR==FNR{ptrns[$0]++;next} 
    FILENAME!="ptrns_list"{for(x in ptrns) if($0 ~ x) print $0>x}' ptrns_list infiles*.csv

首先将所有模式读取到数组中指针列表文件。然后,对于每个 .csv 文件,如果在整行中$0看到这些模式之一,$0 ~ x则将该行打印到与模式匹配的名称相同的单个文件中。

只需传递您的实际搜索模式列表文件并使用inptrns_list输入 .csv 文件。infiles*.csvptrns_list infiles*.csv

相关内容