Мне нужно отсортировать строки текстового файла (без какого-либо расширения), где строки разделены %
. При использовании команды sort
те %
также сортируются, что я не хочу.
Как отсортировать текстовый файл из командной строки или любым другим способом и сохранить с тем же именем?
Например:
имя файла: myfile
Перед сортировкой >>
A line one
%
C line two
%
B line three
%
После сортировки >>
%
%
%
A line one
B line three
C line two
Желаемый >>
A line one
%
B line three
%
C line two
%
Я разделил бы разделитель (awk
ищет нечетные строки), отсортируйте его во временный файл (см. комментарии), и затем sed, что файл для добавления разделителя назад.
awk 'NR%2==1' myfile | sort -o tmpfile; sed -r 's/$/\n\%/g' tmpfile
Это просто выводы к stdout
так засуньте a > myfile
на конце его, если Вы хотите, чтобы это передало тот по каналу назад в Ваш файл. Я оставил это пустым, таким образом, можно протестировать его.
Боковая панель: существует приблизительно сто различных способов обработать реинтеграцию разделителей. Они все работали бы:
awk '{print $0"\n%"}'
while read line; do echo -e "$line\n%"; done
xargs -i^ echo -e "^\n%" # won't work with a redirection >
Может быть, это не лучшее решение для производительности, но этот двойной вызов awk
может сделать это:
$ awk 'BEGIN{RS="\n%\n"}1' file | sort | awk 'BEGIN{ORS="\n%\n"}1'
A line one
%
B line three
%
C line two
%
RS
является «разделителем входных записей» и ORS
«разделителем выходных записей» .
Вывод после sort
таков, так что становится ясно, что мы просто работаем со строками без%:
$ awk 'BEGIN{RS="\n%\n"}1' file | sort
A line one
B line three
C line two