awk关联数组快速增长

awk关联数组快速增长,第1张

概述我有一个文件,将数字分配给md5sums,如下所示: 0 0000001732816557DE23435780915F751 00000035552C6F8B9E7D70F1E4E8D5002 00000051D63FACEF571C09D98659DC553 0000006D7695939200D57D3FBC30D46C4 0000006E501F5CBD4DB56 我有一个文件,将数字分配给md5sums,如下所示:

0   0000001732816557DE23435780915F751   00000035552C6F8B9E7D70F1E4E8D5002   00000051D63FACEF571C09D98659DC553   0000006D7695939200D57D3FBC30D46C4   0000006E501F5CBD4DB56CA48634A9355   00000090B9750D99297911A0496B51346   000000B5AEA2C9EA7CC155F6EBCEF97F7   00000100AD8A7F039E8F48425D9CB3898   0000011ADE49679AEC057E07A53208C1

另一个文件在每行中包含三个md5sums,如下所示:

00000035552C6F8B9E7D70F1E4E8D500    276EC96E149571F8A27F4417D7C6BC20    9CFEFED8FB9497BAA5CD519D7D2BB5D700000035552C6F8B9E7D70F1E4E8D500    44E48C092AADA3B171CE899FFC6943A8    1B757742E1BF2AA5DB6890E5E338F857

我想要的是用第一个文件的整数替换第二个文件中的第一个和第三个md5sums.目前我正在尝试以下awk脚本:

awk '{OFS="\t"}FNR==NR{map[]=;next}{print map[],,map[]}' mapPing.txt relation.txt

问题是尽管第一个文件在硬盘驱动器上仅为5.7g,但脚本需要更多的16g内存.

解决方法 这个问题可以解决,如下所示(file1.txt是包含整数和md5sums的文件,而file2.txt是包含三列md5sums的文件)​​:

#!/bin/sh# First sort each of file 1 and the first and third columns of file 2 by MD5awk '{ print  "\t" }' file1.txt | sort >file1_n.txt# Before we sort the file 2 columns,we number the rows so we can put them# back into the original order latercut -f1 file2.txt | cat -n - | awk '{ print  "\t" }' | sort >file2_1n.txtcut -f3 file2.txt | cat -n - | awk '{ print  "\t" }' | sort >file2_3n.txt# Now do a join between them,extract the two columns we want,and put them back in orderjoin -t'    ' file2_1n.txt file1_n.txt | awk '{ print  "\t" }' | sort -n | cut -f2 >file2_1.txtjoin -t'    ' file2_3n.txt file1_n.txt | awk '{ print  "\t" }' | sort -n | cut -f2 >file2_3.txtcut -f2 file2.txt | paste file2_1.txt - file2_3.txt >file2_new1.txt

对于file1.txt和file2.txt都是100万行的情况,这个解决方案和Ed Morton的awk-only解决方案在我的系统上花费的时间大致相同.我的系统将花费很长时间来解决1.4亿行的问题,无论使用何种方法,但我为1000万行的文件运行了一个测试用例.

我假设依赖于排序的解决方案(在需要时自动使用临时文件)对于大量的行应该更快,因为它将是O(N log N)运行时,而重新读取映射文件的解决方案如果两个文件的大小相似,则输入的每一行都是O(N ^ 2).

计时结果

我对两个候选解决方案的性能关系的假设对于我尝试过的测试用例来说是错误的.在我的系统上,基于排序的解决方案和仅awk解决方案为100万和1000万行输入文件中的每一个采用了相似(在30%以内)的时间量,每个解决方案的解决方案速度更快案件.当然,当输入文件大小超过10倍时,我不知道这种关系是否会成立.

奇怪的是,1000万线路问题花了大约10倍的时间来运行这两个解决方案作为100万线路问题,这让我感到困惑,因为我预计两种解决方案都会出现与文件长度的非线性关系.

总结

以上是内存溢出为你收集整理的awk关联数组快速增长全部内容,希望文章能够帮你解决awk关联数组快速增长所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1031542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存