我需要匹配两个文件中的一个字段,然后合并两个文件中的字段。
文件1将是巨大的,可能有近1200万行。文件2只有大约130行。
我试过了 -
egrep -f file1 file2
这只给了我在file2中包含的匹配信息。
有没有办法匹配两个文件中的信息,然后合并两个文件中的部分?
另外,我需要一些有效的东西,因为file1非常大。
所有字段都以管道分隔。
以下是两个文件的内容以及输出文件。我在每个文件中都包含了一个密钥。
非常感谢任何指导。
文件1:
1234567890|1|6664|NA|KY|0|0|18
2345678901|22|1958|NA|MT|0|0|77
3456789012|3|991B|NA|EM|0|0|13
4567890123|3223|154E|NA|NY|0|0|52
5678901234|8|008F|NA|AZ|0|0|04
6789012345|27|D983|NA|IT|0|0|0
文件1键
Field 1: 10 digit number
Field 2: variable length numeric characters
Field 3: 4 alpha-numeric characters
Field 4: 2 alpha characters
Field 5: 2 alpha characters
Field 6: 1 digit number
Field 7: 1 digit number
Field 8: variable length numeric characters
文件2:
6664|Dr. Zhivago|Russian Literature|421
1958|Dr. Spock|Child Psychology|308
991B|Dr. Martin|Shoe Design|406
3223|Dr. House|Diagnostic Skills|440
008F|Dr. Evil|Global Political Economy|326
D983|Dr. Quincy|Processes of Science: Forensics|156
文件2键
Field 1: 4 alpha-numeric characters
Field 2: Variable length alpha-numeric characters
Field 3: Variable length alpha-numeric characters
Field 4: 3 digit number
必需输出:
1234567890|1|6664|Russian Literature
2345678901|22|1958|Child Psychology
3456789012|3|991B|Shoe Design
4567890123|3223|154E|Diagnostic Skills
5678901234|8|008F Global Political Economy
6789012345|27|D983|Processes of Science: Forensics
输出键
从文件1 -
Field 1: 10 digit number
Field 2: variable length numeric characters
Field 3: 4 alpha-numeric characters
来自档案2 -
Field 4: Variable length alpha-numeric characters
答案 0 :(得分:1)
相对较小,file2的相关内容将适合内存。因此,将其粘贴到一个数组中,键入id号,对于file1中的每一行,检查它是否在数组中,如果是,则以所需格式打印输出。
awk 'BEGIN{FS=OFS="|"}NR==FNR{a[$1]=$3;next}$3 in a{print $1,$2,$3,a[$3]}' file2 file1
请注意,file2必须首先出现在命令行中。