将file1中的字符串与file2中的字符串匹配

问题描述

my data examples are 
1.txt
MTQZ3CODT0SQKGE3QE6B | j t | j | t | 22312 | stimpy | EST | 8 | 20 | text | list | 0 | | 2002-08-22 13:07:05

2.txt
 MTQZ3CODT0SQKGE3QE6B | joe@example.com

desired output 
joe@example.com | j t | j | t | 22312 | stimpy | EST | 8 | 20 | text | list | 0 | | 2002-08-22 13:07:05

我想匹配并替换1.txt中的第一列 与2.txt中的第二列 到目前为止,我确实尝试过:

awk 'BEGIN { while((getline < "file2.txt") > 0) a[$1]=$3 } { $1 = a[$1] } 1' file1.txt

它运行良好,但是运行12小时后,我最终只能确定1GB的速度很慢

INFO: file1.txt=7GB  file2.txt=4GB my memory 16GB

我不确定是什么原因导致了缓慢的运行,但是我希望是否还有另一种快速的方式可以使我使用awk 会有所帮助。
谢谢!

注意:我内存不足,还有另一种方法可以做到 那根本就没有数组? 同样在我的情况下,行是随机的,而不是同一行!

解决方法

$ join <(sort 2.txt) <(sort 1.txt) | cut -d' ' -f3-
joe@example.com | j t | j | t | 22312 | stimpy | EST | 8 | 20 | text | list | 0 | | 2002-08-22 13:07:05

如果这还不是您所需要的,那么请编辑您的问题以提供更真实的示例输入/输出,包括无法解决的情况。

,

您可以使用此awk

awk -F ' *\\| *' -v OFS=' | ' '
FNR == NR {
   map[$1]=$2
   next
}
$1 in map {
   $1 = map[$1]
} 1' 2.txt 1.txt
joe@example.com | j t | j | t | 22312 | stimpy | EST | 8 | 20 | text | list | 0 |  | 2002-08-22 13:07:05

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...