我有一个文本文件,其中包含技能名称列表(近1.5亿行)。我使用命令
对此进行了排序sort myFile.txt >> SortedFile.txt
为验证此命令的结果,我执行了命令
grep -n "^JavaScript$" SortedFile.txt >> lineNumbers.txt
我可以看到JavaScript分为两组。一组来自27819903 - 28071139
,另一组来自99390179 - 99607141
。
此问题不仅与技能“ JavaScript”有关,而且在许多技能中也会发生。 sort命令有什么问题?
如何使用sort命令正确对myFile
进行排序?
答案 0 :(得分:2)
没有测试数据很难说清(a),但是由于它分为两部分,所以我的第一个建议是更改:
sort myFile.txt >> SortedFile.txt
收件人:
sort myFile.txt > SortedFile.txt
其中第一个简单地将结果追加到一个可能已经存在的文件中,因此,如果两次执行,则将分成两个不同的部分。与您用于发现行号的grep
命令同上。
我希望,如果您使用相同的源,则会得到两个大小相等的块(此处不是这种情况),但是我不知道文件中的之前您已将其附加。
因此,请尝试不添加任何内容,看看是否有相同的问题。
我想问自己的另一件事是:为什么要对它进行排序?在我看来(尽管我以前做错了,只是问我的妻子一个完整的清单),这里唯一可能的用例是计算每种技能的数量。我很难设想任何其他可能性,但是,如果您有其他可能性,请告诉我们,对于不同的用例,可能还有同样更好的方法。
如果是计数 的话,有比排序更好的方法,您可以简单地对它们进行计数而无需考虑顺序,例如:
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)而且三位数演出可能是太多测试数据,无法发布:-)