【发布时间】:2019-08-27 12:35:39
【问题描述】:
我正在尝试 grep 几种模式,这些模式已存储在一个文本文件中。 我想在另一个文件中 grep 这些模式中的每一个,并将每个 grep 的结果保存在一个单独的文本文件中。
简化示例:
数据(存储在targets.txt):
ERR751956 1.1
ERR718556 1.1
ERR775770 1.1
ERR553258 1.1.1
SRR5067466 1.1.1
ERR768007 1.1.1
ERR2515049 1.2.1
ERR2517293 1.2.1
ERR400534 1.2.1
ERR1034610 1.2.2
ERR221606 1.2.2
SRR2101271 1.2.2
ERR718276 2.1
SRR5709934 2.1
SRR5065676 2.2
SRR5709903 2.2
我正在尝试根据第一个小数位对数据进行分组,因此我搜索了这些模式,并将其存储在一个名为 patterns.txt 的文件中:
"\s1.1
\s1.2
\s2.1
\s2.2"
当我单独运行 grep 时,它可以工作,例如grep "\s1.1" targets.txt
我想要做的是 grep 所有这些模式并将结果存储为一个单独的文件,最好使用 target_1.1.txt 格式。
我尝试了许多循环的变体,包括这个:
while IFS= read -r line
do
grep "$line" targets.txt > target_"$line".txt
done < patterns.txt
然而,
- 它保存了包含 grep 命令“
\s”的文件名,我不想要,但是 - 它不会提取所有 grep 并将它们保存在一个文件中 - 有些结果只是一个空文件。
再一次,我已经运行了它没有单独拾取的那些,它们打印到屏幕上就好了。
【问题讨论】:
-
第一行和最后一行的引号是否真的在您的
patterns.txt文件中?我认为它们只是偶然出现在问题中,但如果它们实际上在文件中,您应该删除它们。