Відсортований файл не збережено правильно [закрито]


0

Якщо я сортую файл, я хочу зберегти його в новому. Я використовую для цього просто:

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)

PS

Дякую, я сама знайшла проблему. Введення було пошкодженим, оскільки деякі рядки мають додаткові поля.

{'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

Ви кажете, що команда спрацювала? Тепер у мене питання;) Дивіться мою відповідь.
Волкер Зігель

Якщо рішення та як ви його знайшли, може бути корисним для інших читачів, напишіть будь ласка відповідь! (Якщо це не допоможе зрозуміти питання насправді, давайте просто зачекаємо, поки воно закриється)
Volker Siegel,

Ах, я бачу, додаткові стовпці на кшталт 'f':'f',робить це ускладнюється sortокремо; Він не створений для подібних даних. Тож sedгарна ідея.
Волкер Зігель

Відповіді:


1

Розділювач поля сортування не вказаний у вашій команді:

sort -nk25

За замовчуванням розділювач поля сортування складається з пробілу 1 .
Це означає, що ви сортуєте на 25-му полі 3 поля. Не дуже зрозуміло, що ви хочете сортувати - але ви можете спробувати сортувати на розділений колоною 3 пробілів за допомогою:

sort -nk3

Залежно від того, що саме ви бачите як стовпці, ви можете зіткнутися з проблемою, що роздільником поля може бути лише один символ, а не набір символів (або навіть звичайний вираз) - за винятком окремого випадку, описаного нижче.
Таким чином, ви можете використовувати цитату як роздільник поля, як sort -t"'" ...і сортувати за значеннями символів; З цифрами це не працює так, бо вони не цитуються.


(1): роздільник полів за замовчуванням не складається з одного чи фіксованого числа символів пробілу. Розділювач є переходом без порожнього до порожнього - це робить будь-який рядок пробілів, який не починається в першому стовпчику, роздільником.


дякую, але головна проблема полягає в тому, що файл пошкоджений .... У деяких рядках є додаткові поля, і це не має сенсу сортування за деяким полем (стовпцем), тому що всі значення зміщуються .. Я вже будую якесь рішення з регулярним виразом.
Гуфору

Добре! Якщо ви можете додати цей зміщений вклад до питання, мені буде цікаво, чи можна його вирішити за сортуванням до; Визначення ключових типів сортування настільки потужне, що опис відверто страшно;)
Volker Siegel,

Мені дуже шкода, це було незрозуміло. -nk25 походить від реальної програми, звичайно не співвіднесеної із прикладом іграшки тут. Вибачте, я гадав, було б зрозуміло ...
Гуфору,

Схоже, sort -nk3це також не працює, оскільки числове сортування не ігнорує нецифрові цифри.
Volker Siegel

Я думаю, -nk9 буде сортувати таблицю без додаткових полів.
Гуфору
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.