gpt4 book ai didi

linux - 快速删除多个文件之间的重复行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:05 24 4
gpt4 key购买 nike

我有 10k 个文件,每个文件有 80k 行,需要比较,并且 - 删除重复行或用“0”替换它们。超快,因为我必须这样做 +1000 次。

对于少于 100 行的文件,以下脚本足够快。现在 tcsh

import csv
foreach file ( `ls -1 *` )
split -l 1 ${file} ${file}.
end
find *.* -type f -print0 | xargs -0 sha512sum | awk '($1 in aa){print $2}(!($1 in aa)){aa[$1]=$2}' | xargs -I {} cp rowzero {}
cat ${file}.* > ${file}.filtered

其中“rowzero”只是一个带有...零的文件。我试过 python 但没有找到快速的方法。我已经尝试粘贴它们并快速完成所有不错的操作(awk、sed、上面的命令等),但是当文件超过例如1000 列。我需要帮助,感谢一百万小时!

最佳答案

好的,这是迄今为止我能编写的最快的代码,它适用于转置和“cat”输入。如前所述,“cat”编辑的输入“>>”工作正常,但是“paste”或“pr”代码在将另一列粘贴到例如 +1GB 文件中时会带来噩梦,这就是我们需要转置的原因。例如每个原始文件看起来像

1 2 3 4 

...如果我们将第一个文件与其他文件进行转置和分类,代码的输入将如下所示:

1 2 3 4 .. 1 1 2 4 .. 1 1 1 4 .. 

代码将返回原始的“aka retransposed pasted”格式,其中包含打乱行的次要细节

1 1 2 1 2 32 3 4..

重复的行被有效地删除了。在代码下方,

但是代码不是通用的!它仅适用于 1 位整数,因为 awk 数组索引未排序。有人可以帮助概括它吗?谢谢!

{for(ii=1;ii<=NF;ii++){aa[ii,$ii]=$ii}}END{mm=1; for (n in aa) {split(n, bb, SUBSEP);
if (bb[1]==mm){cc=bb[2]; printf ( "%2s", cc)}else{if (mm!=bb[1]){printf "\n%2s", bb[2] }; mm=bb[1]}}}

关于linux - 快速删除多个文件之间的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com