Я думаю, на основе моего собственного опыта и ответов здесь, Вы больше ищете комплект приложений и инструментов, которые сделают разработку легче и более практичной.
Прохладная вещь о Linux состоит в том, что любое распределение очень легко настроить. Я рекомендовал бы найти список программного обеспечения, которое Вы чаще всего используете при разработке и делаете большой tarball, который можно принести с компьютера на компьютер (при переключении рабочих областей много).
Я получил ту же ошибку с Ubuntu 11.04, с sort
и join
оба в версии (GNU coreutils) 8.5.
Они являются явно несовместимыми. На самом деле sort
команда кажется с ошибками: нет никакого различия с или без -f
(--ignore-case
) опция. При сортировке, aaB
всегда прежде aBa
. Не алфавитно-цифровые символы кажется также всегда игнорируемым (abc
прежде ab-x
)
Соединение, кажется, ожидает противоположное... Но у меня есть решение
На самом деле это связано с сортирующей последовательностью: использование LANG=en_EN sort -k 1,1 <myfile> ...
затем LANG=en_EN join ...
устраняет сообщение.
Интернационализация является корнем зла... (никто не документирует его ясно).
Для соединения аргументом после-t является символ. Для вида можно предоставить более длинный разделитель вида. Я думаю, что можно присоединяться к файлам на другом поле, что Вы хотите, и игнорирование регистра решает проблему по совпадению.
И я соглашаюсь с Gilles, те демонстрационные данные были бы полезны.
Вы сортировали с числами? Я нашел, что дополнение нуля столбец, что я присоединялся на решенном к этой проблеме для меня.
cat file.txt \
| awk -F" " '{ $20=sprintf("%06s", $20); print $0}' \
| sort > readytojoin.txt
Если Вы уверены, что правильно отсортировали свои входные файлы, и их строки могут быть соединены, можно избежать вышеупомянутой ошибки путем выполнения join --nocheck-order file1.txt file2.txt
sort
значением по умолчанию использует всю строку в качестве ключа
join
использование только указанное поле как ключ.
Необходимо исправить эту несовместимость путем ограничения вида для использования только ключа, на котором Вы хотите присоединиться.
Состояния страницы справочника Соединения:
Важный: FILE1 и FILE2 должны быть отсортированы на объединяющих полях. Например, используйте 'вид-k 1b, 1', если> 'соединение' не имеет никаких опций. Примечание, сравнения соблюдают правила, указанные 'LC_COLLATE'. Если> вход не будет отсортирован, и к некоторым строкам нельзя присоединиться, то предупреждающее сообщение будет дано.
LOCALE=C sort ...
LOCALE=C join ...
Это решит вашу проблему. Проблема, как указывает @Michael, заключается в последовательности сопоставления, которая зависит от вашей настройки LOCALE.
Обратите внимание, что если вы видите эту ошибку, и вы уже отсортировали по определенному колонка и бьетесь головой о стену например sort -k4,4, тогда вам также может понадобиться установить разделитель для команды сортировки
По-видимому, OP уже сделал это с -t ' ', но для обычного текста, разделенного табуляцией, я бы рекомендовал
sort -t $'\t' ...
Команда сортировки может включать пробелы в качестве разделителей по умолчанию даже в том, что выглядит как файл, разделенный табуляцией (особенно если внутри столбца, по которому вы сортируете, есть пробелы).
Затем, если вы передали эти отсортированные данные для соединения, и у вас есть
join -t $'\t' ...
, то это приводит к появлению сообщения об ошибке о том, что они не отсортированы. Как отмечалось выше, join может не принимать -t ' '.
LANG=en_EN
, затем это будет определенно работать? Это будет работать на какую-либо локаль, пока оба используют ту же локаль? Мы можем сказать что различие междуsort
иjoin
это, они используют другую локаль по умолчанию? – Aaron McDaid 25.08.2014, 18:19-k
опция ответ здесь, или этоLANG=en_EN
? Неясно из того, что точное решение здесь. – User 21.07.2016, 02:12