Сортируйте файл численно и сохраняйте пустые строки между записями в Bash - PullRequest
0 голосов
/ 20 мая 2018

В настоящее время я борюсь за сортировку данных.Я искал в Интернете и никогда не видел ни одной темы, в которой упоминается моя проблема ...

У меня есть файлы с неупорядоченными данными, такими как:

1
blank line
3
blank line
2

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

blank line
blank line
1
2
3

Я хотел бы получить вывод:

1
blank line
2
blank line
3

которая сохраняет структуру ввода.

Используемая мной команда: sort -nk1 filename > newfile

Как сохранить пустые строки в нужных местах?

1 Ответ

0 голосов
/ 20 мая 2018

Удалите пустые строки, отсортируйте и снова добавьте пустые строки:

grep . filename | sort -nk1 | sed 's/$/\n/' > newfile

Вы можете объединить grep и sed

sort -nk1 filename | sed -n '/./ s/$/\n/p' > newfile

Когда у вас нетпустая строка после каждой строки данных, вам нужно временно добавить маркер

tr '\n' '\r' < filename | 
  sed -r 's/([^\r]+)\r\r/\1\a\r/g;s/\r/\n/g' | 
  sort -nk1 | sed 's/\a/\n/g' > newfile
...