比较两个文件并根据匹配的子字符串提取行?

Compare two files and extract line based on matching substring?

我有两个文件

crackedHashes.txt 格式为 Hash:Password

C3B9FE4E0751FC204C29183910DB9EB4:fretful
CA022093C4BAFA397FAC5FB2E407FCA9:remarkable
36E13152AA93A7631608CD9DD753BD2A:please

hashList.txt 格式为 Username:Hash

Frank:C3B9FE4E0751FC204C29183910DB9EB4
Jane:A67BC194586C11FD2F6672DE631A28E0
Lisa:CA022093C4BAFA397FAC5FB2E407FCA9
John:36E13152AA93A7631608CD9DD753BD2A
Dave:6606866DB8B0232B371C2C4C35B37D01

我想要一个新文件,它根据相同的匹配散列组合两个列表。

output.txt

Frank:C3B9FE4E0751FC204C29183910DB9EB4:fretful
Lisa:CA022093C4BAFA397FAC5FB2E407FCA9:remarkable
John:36E13152AA93A7631608CD9DD753BD2A:please

我一直在这里搜索论坛,只能找到返回一个字符串或不使用正则表达式(匹配整行)的东西。我试着分几部分来做,所以我首先通过 sed 's/:.*//' crackedHashes.txt 来分解 crackedHashes,然后打算对另一个文件做同样的事情,并通过基本上写一堆输出文件并比较输出文件来进行比较。我还尝试根据 grep -f crackedHashes.txt hashList.txt > outfile.txt 的变化进行比较,但结果 "results" 比预期的要多得多。

我可以手动执行 grep <hash> hashList.txt> 但是当涉及到文件和行时我有点迷路

使用 GNU 连接,bash 和 GNU 排序:

join -1 1 -2 2 -t : <(sort crackedHashes.txt) <(sort -t : -k 2 hashList.txt) -o 2.1,1.1,1.2

输出:

John:36E13152AA93A7631608CD9DD753BD2A:please
Frank:C3B9FE4E0751FC204C29183910DB9EB4:fretful
Lisa:CA022093C4BAFA397FAC5FB2E407FCA9:remarkable

参见:man join