Bash 有没有更快的方法在另一个文件中查找一个文件的内容?
我有两个文件 文件f1(在一列中仅包含约10000个唯一行) 文件f2(有多列和大约300000行)Bash 有没有更快的方法在另一个文件中查找一个文件的内容?,bash,unix,scripting,Bash,Unix,Scripting,我有两个文件 文件f1(在一列中仅包含约10000个唯一行) 文件f2(有多列和大约300000行) 文件f2的第一列具有与文件f1相同的元素。我想grep这些公共元素(全部10000个)以及file2中其他列的内容 到目前为止,我已经试过了 grep -f f1 f2 and also grep -F -f f1 f2 但这两个都给了我最终输出(10000+)中的一些额外行。这两个文件的第一列都有一些内容,它们之间用“/”分隔,这可能需要更多的文本操作 如。 第1列 a/b/c e
文件f2的第一列具有与文件f1相同的元素。我想grep这些公共元素(全部10000个)以及file2中其他列的内容 到目前为止,我已经试过了
grep -f f1 f2
and also
grep -F -f f1 f2
但这两个都给了我最终输出(10000+)中的一些额外行。这两个文件的第一列都有一些内容,它们之间用“/”分隔,这可能需要更多的文本操作
如。
第1列a/b/c
e/f/g
x/y
grep-f
是一个良好的开端,但存在两个问题:
- 对于文件
=f1
和line1
=f2
,由于grep在line100 a b
中找到字符串line100
,因此会出现误报。这可以通过grep的line1
选项来防止李>-w
- 对于文件
=f1
和line1
=f2
您会得到一个假阳性,因为grep在第三列中找到了根本不应该搜索的字符串line2 a line1
。使用line1
很难防止此类错误。一种安全的方法是生成扩展正则表达式模式(类似于grep
grep-Ef
或grep-F-w-F f1-f2
?有什么额外的内容(grep-F-e'^\w\w*'-F f1-f2
)与A/b/c
和f1
不匹配?请在问题中添加带有字段分隔符的文件f2示例(无注释)。是否仅从f2中提取第1列中具有f1中存在的值的行?我希望输出类似(仅提取第1列中的公共元素,以及文件2中第2列和第3列的内容)line1 x y line 2 e fIn,在这种情况下,f2
。(否则,grep-F-e'^line'-F f1 f2
始终可用)张贴每个文件中好的行的文本示例,以及每个文件中的分层内容(每个文件大约5行)awk
grep -f f1 f2 and also grep -F -f f1 f2
join <(sort f1) (sort f2)
hsort() { IFS= read -r header; printf %s\\n "$header"; sort; } join --header <(hsort < f1) <(hsort < f2)