我想将文件名/s 与匹配模式一起打印,但即使模式匹配在文件中多次出现,也只能打印一次。
例如,我有一个模式列表;list_of_patterns.txt
我需要找到文件的目录是/path/to/files/*
.
list_of_patterns.txt:
A
B
C
D
E
/路径/到/文件/
/file1
/file2
/file3
假设有多次这样/file1
的模式:A
/文件1:
A
4234234
A
435435435
353535
A
(同样适用于有多个模式匹配的其他文件。)
我有这个 grep 命令正在运行,但是每次模式匹配时它都会打印文件名。
grep -Hof list_of_patterns.txt /path/to/files/*
输出:
/file1:A
/file1:A
/file1:A
/file2:B
/file2:B
/file3:C
/file3:B
... and so on.
我知道 sort 可以在 grep 命令之后通过管道执行此操作,grep -Hof list_of_patterns.txt /path/to/files/* | sort -u
但它仅在 grep 完成时执行。在现实世界中,我list_of_patterns.txt
的内部有数百种模式。有时需要一个小时才能完成任务。
有没有更好的方法来加速这个过程?
更新:一些文件有超过一百次匹配模式。例如/file4
,模式出现A
900 次。这就是为什么需要grep
一个小时才能完成的原因,因为它会打印每次出现的模式匹配以及文件名。
例如输出:
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
... and so on til' it reach 900 occurrences.
我只希望它只打印一次。
例如期望的输出:
/file4:A
/file1:A
/file2:B
/file3:A
/file4:B
是的,它叫做 GNU
parallel
:j N
- 职位数量。并行运行多个N
作业。0
是尽可能多的意思。k
(--keep-order
) - 保持输出顺序与输入顺序相同::: arguments
- 使用arguments
命令行作为输入源而不是标准输入(标准输入)