Сортировать файл только по первым двум столбцам и сохранить порядок ввода, если столбцы имеют одинаковые значения
У меня есть входной файл, строки которого я хотел бы отсортировать только по 2 первым столбцам. И я хотел бы знать, есть ли способ сделать это с помощью команды sort в bash.
Ex. Входной файл:
cat checkstart.txt
dev XCUBOBS149 /etc/init.d/DSEngine_srv dev XCUBOBS150 /etc/init.d/DSEngine_srv dev XCUBOBS149 NO_LINKS_TO_STARTSCRIPTS dev XCUBOBS149 ufabric:x:46000:46000::/home/ufabric:/bin/bash dev XCUBOBS149 export JAVA_HOME=/soft/jdk/jdk1.7.0_79/
Я пытаюсь с
sort -b -k1,2 checkstart.txt
но результат не тот, который я ожидаю, потому что он сортирует все строки по алфавитно-цифровому порядку:
dev XCUBOBS149 /etc/init.d/DSEngine_srv dev XCUBOBS149 export JAVA_HOME=/soft/jdk/jdk1.7.0_79/ dev XCUBOBS149 NO_LINKS_TO_STARTSCRIPTS dev XCUBOBS149 ufabric:x:46000:46000::/home/ufabric:/bin/bash dev XCUBOBS150 /etc/init.d/DSEngine_srv
Я хотел бы получить файл результатов, как это:
dev XCUBOBS149 /etc/init.d/DSEngine_srv dev XCUBOBS149 NO_LINKS_TO_STARTSCRIPTS dev XCUBOBS149 ufabric:x:46000:46000::/home/ufabric:/bin/bash dev XCUBOBS149 export JAVA_HOME=/soft/jdk/jdk1.7.0_79/ dev XCUBOBS150 /etc/init.d/DSEngine_srv
1 ответ
Решение
Вы ищете стабильный алгоритм сортировки. sort
обеспечивает один. Вы можете включить его с помощью -s
вариант.
$ sort -s -k1,2 checkstart.txt
dev XCUBOBS149 /etc/init.d/DSEngine_srv
dev XCUBOBS149 NO_LINKS_TO_STARTSCRIPTS
dev XCUBOBS149 ufabric:x:46000:46000::/home/ufabric:/bin/bash
dev XCUBOBS149 export JAVA_HOME=/soft/jdk/jdk1.7.0_79/
dev XCUBOBS150 /etc/init.d/DSEngine_srv