排序后的文件未正确保存

排序后的文件未正确保存

如果我对文件进行排序,我想将其保存在新文件中。我用这个只是:

sort -nk{fieldnumber} test.json > testsort.json

在输出中,列被打乱,并且我已排序的列按随机顺序排列(不是升序)。为什么会这样呢?另外,我想将这个排序的文件分成许多部分。我希望所有部分也按列排序,如下所示:

partaa
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':2}

partab
{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'c':3}
{'a':'a', 'b':'b', 'c':3}

partac
{'a':'a', 'b':'b', 'c':4}
{'a':'a', 'b':'b', 'c':5}
{'a':'a', 'b':'b', 'c':6}

我用它

split -l 100 testsort.json part

不管怎样,我一直都有打乱的、无序的输出。 (例如,partac 的某些值可能小于partab 的值)

聚苯乙烯

谢谢,我自己已经发现问题了。输入已损坏,因为某些行具有附加字段。

{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'c':1}
{'a':'a', 'b':'b', 'c':2}
{'a':'a', 'b':'b', 'd':'d', 'c':1}
{'a':'a', 'b':'b', 'c':3}
{'a':'a', 'b':'b', 'f':'f', 'c':4}

我构造下一个正则表达式,它搜索特定字段,获取数值,将它们放在前面并对它们进行排序

sed -e 's/^\(.*columnname\)\([^,]*\)/\2\t\1\2/;s/^[" :]*//' test.json | sort -nk1 |sed -e 's/^[^{]*//' > testSort.json

答案1

您的命令中未指定排序的字段分隔符:

sort -nk25

默认情况下,字段分隔符排序由空格1组成。
这意味着您对 3 个字段中的第 25 个字段进行排序。目前尚不清楚您想要排序的内容 - 但您可以尝试使用以下命令对空格分隔的第 3 列进行排序:

sort -nk3

根据您所看到的列的具体内容,您可能会遇到这样的问题:字段分隔符只能是单个字符,而不是一组字符(甚至是正则表达式) - 除了下面描述的特殊情况。
因此,您可以使用引号作为字段分隔符,例如sort -t"'" ...,并对字符值进行排序;它不适用于数字,因为它们没有被引用。


(1):默认字段分隔符不包含单个或固定数量的空格字符。分隔符是非空白到空白的转换 - 使任何不在第一列中开始的空白字符串成为分隔符。

相关内容