Сортировать по смежным цифрам как одно число

Вы можете использовать другой символ для разделителя, как указывали другие, например:

sed -i 's!pattern!replacement!g' /path/to/file

Но если нет удобного символа для использования вместо /в качестве разделителя, вы также можете избежать любых встроенных символов-разделителей в ваших patternи replacement, поставив перед каждым из них обратную косую черту \. Вот пример использования /в качестве разделителя, который заменяет /some/pathна../some/replacement:

sed -i 's/\/some\/path/..\/some\/replacement/g'

Тем не менее, людям труднее читать, поэтому, как правило, если это вообще возможно, лучше использовать другой символ для разделителя, подобного этому:

sed -i 's!/some/path!../some/replacement!g'
3
21.09.2019, 23:35
3 ответа
sort -nt '_' -k2 

Выход:

file_0
file_1
file_2
file_3
file_4
file_5
file_6
file_7
file_8
file_9
file_10
file_11
file_12
file_13
file_14
file_15

или:

file_0.txt
file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
file_6.txt
file_7.txt
file_8.txt
file_9.txt
file_10.txt
file_11.txt
file_12.txt
file_13.txt
file_14.txt
file_15.txt

Протестировано с реализациями FreeBSD и GNU coreutils sort, но не будет работать с реализацией busybox. Все используемые варианты указано POSIX .

5
27.01.2020, 21:11

Ответ (один из них, я уверен )это:

sort -t _ -k 2 -g [filename with names+numbers or piped from another command with | - both situations will work ]
1
27.01.2020, 21:11

Пожалуйста, попробуйте:

output | awk '{print gensub("[^0-9]*","","g")  " " $0 }' | sort -n | awk '{$1=""; print $0}' | sed 's/^ //g'

Это не самое элегантное решение, но оно работает.

2
27.01.2020, 21:11

Теги

Похожие вопросы