问题描述
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