Никогда не следует полагаться на / dev / sd *
для согласованности при перезагрузках, гибернации и т. Д. Буквы назначаются в любом порядке, в котором запущены модули ядра или программное обеспечение пользовательского пространства, и нет никакой гарантии уважение к этому порядку.
Однако udev уже создает различные виды символических ссылок в / dev / disk /
, которые начинаются с by-
. Эти символические ссылки остаются неизменными.
Очевидно, не все они обновляются во время пробуждения, но, по крайней мере, / dev / disk / by-id
обновляются. Кроме того, установка по-прежнему недействительна после пробуждения, но повторная установка решает проблему.
Мне нравится использовать вставьте команду
.
paste -d. file1 - - file2 < /dev/null
производит желаемый результат
file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d
-
относится к стандартному вводу, мы используем его дважды, чтобы утроить наши точки dev / null
используется, потому что нам не нужно ничего между этими точками.
Это ответ @zacharybrady, но он больше похож на то, что вы просили. Это касается входных процессов. Это, я думаю, вы расширите.
paste -d. <(cat file1) - - <(cat file2) < /dev/null
Спасибо @zacharybrady за ту часть, на которой я застрял. Я дошел до этого join <(cat -n file1) <(cat -n file2) | cut -d" " -f2-
, так как забыл про paste
. Однако я не смог правильно указать разделитель полей.
Примечание: я обнаружил, что paste
не совместим с utf-8. Он обрабатывает только первый байт после -d
, поэтому -d...
не работает. (Я использую debian jessie, paste (GNU coreutils) 8.23)
Если вы вставите
два файла, они будут разделены табулятором. Поэтому просто замените табулятор на нужный вам разделитель:
$ paste file1 file2 | sed -e 's/\t/.../'
Если в вашем содержимом есть табулятор, придумайте новый разделитель, который не встречается, как %:
$ paste -d% file1 file2 | sed -e s/%/.../