ソートされたファイルが正しく保存されませんでした。 [閉じる]

ソートされたファイルが正しく保存されませんでした。 [閉じる]

ファイルをソートしたら、新しいファイルに保存したいと思います。私はこれを次のように使用します。

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): デフォルトのフィールド区切り文字には、単一または固定数の空白文字は含まれません。区切り文字は、空白ではなく空白を空白に変換することです。最初の列で始まらない空白文字列を区切り文字にします。

関連情報