繁体   English   中英

将文件 1 中的字符串与文件 2 中的字符串匹配

[英]Match string in file1 with string in 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

我想用 2.txt 中的第二列匹配和替换 1.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM