У меня есть данные в следующем формате:
foo<tab>1.00<space>1.33<space>2.00<tab>3
Теперь я попытался отсортировать файл по последнему полю по убыванию. Я попробовал следующие команды, но они не были отсортированы, как мы ожидали.
$ sort -k3nr file.txt # apparently this sort by space as delimiter
$ sort -t"\t" -k3nr file.txt
sort: multi-character tab `\\t'
$ sort -t "`/bin/echo '\t'`" -k3,3nr file.txt
sort: multi-character tab `\\t'
Какой правильный способ сделать это?
Вот пример данных .
linux
unix
sorting
tab-delimited
neversaint
источник
источник
'"'"'
для использования внутри псевдонима.awk '{print $0 | "sort -nr" > "outfile" }' datafile
, кроме как с помощью разделителя с экранированными табуляциями, отправляемого команде сортировки.-g
а не-n
если вы хотите числовую сортировку.-n
сломан.По умолчанию разделитель поля является непустым переходом к пустому, поэтому вкладка должна работать очень хорошо.
Тем не менее, столбцы индексируются как база 1 и база 0, так что вы, вероятно, хотите
отсортировать файл file.txt по столбцу 4 в обратном порядке. (Хотя данные в вопросе имеют даже 5 полей, поэтому последнее поле будет индексом 5.)
источник
Вам нужно поместить фактический символ табуляции после -t \ и сделать это в оболочке, нажав Ctrl-V, а затем символ табуляции. Большинство оболочек, которые я использовал, поддерживают этот режим буквального ввода табуляции.
Однако будьте осторожны, потому что копирование и вставка из другого места обычно не сохраняет вкладки.
источник
C-q <tab>
например. Я думаю, что это^V
в нано.Решение $ не сработало для меня. Однако, фактически поместив сам символ табуляции в команду, сделал: sort -t '' -k2
источник
<C-v><Tab>
для вставки вкладки, если клавиша табуляции используется для автозаполнения в вашей оболочке.$'\t'
работает в ksh, zsh и bash. Оболочка Борна не поддерживает это. Смотрите это сообщение: unix.stackexchange.com/a/371873/201820труба через что-то вроде
awk '{ print print $1"\t"$2"\t"$3"\t"$4"\t"$5 }'
. Это изменит пробелы на вкладки.источник
В общем, хранить подобные данные не очень хорошая вещь, если вы можете избежать этого, потому что люди всегда путают табуляции и пробелы.
Решение вашей проблемы очень просто на языке сценариев, таких как Perl, Python или Ruby. Вот пример кода:
источник
Я хотел найти решение для сортировки Gnu в Windows, но ни одно из перечисленных выше решений не работало для меня в командной строке.
Используя подсказку Ллойда, следующий пакетный файл (.bat) работал для меня.
Введите символ табуляции в двойных кавычках.
источник
У меня была эта проблема с сортировкой в cygwin в оболочке bash при использовании 'general-numeric-sort'. Если я указал
-t$'\t' -kFg
, где F - номер поля, это не сработало, но когда я указал оба-t$'\t'
и-kF,Fg
(например,-k7,7g
для 7-го поля), оно сработало.-kF,Fg
без-t$'\t'
не работал.источник
Если вы хотите упростить для себя только наличие вкладок, замените пробелы вкладками:
источник
usage: tr [-Ccsu] string1 string2
tr string1 string2 <some-file
, Файл может читать каждый, если он умеет читать stdin.Ответ Ларса Хаугсета работал только для меня из командной строки, где он выдает эту ошибку, если выполняется из сценария оболочки:
сортировка: многосимвольная вкладка '$ \ t'
Решение, если оно закодировано в сценарии оболочки, если кто-то ищет,
символ табуляции находится между кавычками.
источник