Команда Linux "join" не работает как надо? - PullRequest
0 голосов
/ 29 мая 2019

Я прорабатываю первый пример здесь: Linux Journey

Однако я не получаю тот же вывод после join file.txt file2.txt

Вместо этого я получаю:

 Doehn

 Doene

 Suery

Я не могу понять, что происходит - изменился ли синтаксис команды соединения после публикации этого веб-сайта?

1 Ответ

2 голосов
/ 29 мая 2019

Мой хрустальный шар говорит, что ваши текстовые файлы в формате DOS, с окончанием перевода строки (CR LF).Вот почему ваш вывод выглядит немного странно при печати на консоли.

Чтобы исправить это, конвертируйте файлы в формат unix.(У вас может быть команда dos2unix; или, если вы уже используете vim, попробуйте :set ff=unix; или perl -i -pe 's/\r//' file.txt сделает это в крайнем случае.)


Примеры файлов в вашей ссылкес дополнительными возвратами каретки:

file1.txt

1 John\r
2 Jane\r
3 Mary\r

file2.txt

1 Doe\r
2 Doe\r
3 Sue\r

(Использование\r для представления возврата каретки.)

Теперь, когда вы запустите join file1.txt file2.txt, он сначала сравнит первое поле первой строки в каждом файле.Это успешно (1 с обеих сторон), поэтому join выводит общее поле, пробел, оставшиеся поля из файла 1, другой пробел, а затем оставшиеся поля из файла 2. Итак, первая строка вывода -

1 John\r Doe\r

(\r интерпретируется как часть полевых данных).

Но подождите!\r не является печатным символом.Это приводит к перемещению курсора назад к началу строки при печати на терминале.Используя ^, чтобы отметить позицию курсора, мы получаем следующий эффект:

1
 ^
1 
  ^
1 J
   ^
1 Jo
    ^
1 Joh
     ^
1 John
      ^

Здесь мы печатаем первый возврат каретки, перемещаякурсор назад:

1 John
^

Следующий выводимый символ (пробел) перезаписывает 1:

  John
 ^
 DJohn
  ^
 Doohn
   ^
 Doehn
    ^

Еще один возврат каретки, но этотодин не имеет видимого эффекта:

 Doehn
^

И ... готово.

Другие строки обрабатываются аналогичным образом.Каждый раз, когда возврат каретки в конце последнего поля файла 1 перемещает курсор назад, поэтому поля из файла 2 перезаписывают то, что уже есть на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...