gpt4 book ai didi

linux - 排序命令不适用于大文件

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:05 24 4
gpt4 key购买 nike

我有一个包含技能名称列表的文本文件(将近 1.5 亿行)。我使用命令对此进行了排序

sort myFile.txt >> SortedFile.txt 

为了验证这个命令的结果,我执行了命令

grep -n "^JavaScript$" SortedFile.txt >> lineNumbers.txt 

我可以看到 JavaScript 出现在两个组中。一组来自 27819903 - 28071139,另一组来自 99390179 - 99607141

这个问题不仅出现在技能“JavaScript”上,很多技能都会出现。排序命令有什么问题?

如何使用 sort 命令对 myFile 进行正确排序?

最佳答案

如果没有测试数据,这有点难说(a) 但是,由于它分为两部分,我的第一个建议是更改:

sort myFile.txt >> SortedFile.txt

到:

sort myFile.txt > SortedFile.txt

其中的第一个只是将结果附加到一个可能已经存在的文件中,因此,如果你这样做两次,你得到两个不同的部分。用于发现行号的 grep 命令也是如此。

我希望,如果您使用相同的来源,您会得到两个大小相等的 block (这里不是这种情况),但我不知道该文件之前 你附加到它。

所以,不附加就试试吧,看看你是否有同样的问题。


我要问自己的另一件事是:为什么您要对它进行排序?在我看来(虽然我以前错了,只是向我妻子要一份综合 list )这里唯一可能的用例是计算每项技能的数量。我很难想象任何其他可能性,但如果您有任何其他可能性,请告诉我们,对于不同的用例,可能有同样更好的方法来做到这一点。

如果计数这种情况,那么有比排序更好的方法,您可以不考虑顺序地简单地计算它们,像这样:

awk '{count[$1]++}END{for(key in count){print key" "count[key]}}'

以下面的命令为例:

pax> ( echo JavaScript; echo C; echo Java; echo JavaScript ) | awk '
...> {count[$1]++}END{for(key in count){print key" "count[key]}}'

这会产生:

C 1
Java 1
JavaScript 2

(a) 三个以上的演出可能有点太多测试数据无法发布:-)

关于linux - 排序命令不适用于大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070656/

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