По умолчанию машина будет обычно только выполнять один дисплей-:0, который обычно находится на VT 7.
При выполнении второго X-сервера это будет:1. Можно сделать это из командной строки, но более легкий путь состоит в том, чтобы выбрать "start new session" в KDE (я предполагаю, что GNOME имеет некоторый эквивалент, но я не знаком с ним). Это позволяет Вам войти в систему снова на втором X-сервере, который будет работать на VT 8 (т.е. можно подкачать между ними с Ctrl-Alt-F7 и Ctrl-Alt-F8).
Необходимо затем смочь запустить приложения на любом при помощи "ДИСПЛЕЯ =:1 xterm" или что бы то ни было.
Эта проблема делает для типового приложения awk
awk 'NR == FNR{a1[$1]=$2; a2[$1]=$3; next};
$1 in a1{$5=a1[$1]; $6=a2[$1]};{print}' file_2.txt file_1.txt
Вам, вероятно, придется установить выходного разделителя полей явно на вкладку, в этом случае
awk -v OFS='\t' 'NR == FNR{a1[$1]=$2; a2[$1]=$3; next};
$1 in a1{$5=a1[$1]; $6=a2[$1]};{print}' file_2.txt file_1.txt
Это не решает Вашу проблему, а скорее показывает Вам почему join
май на имя кажется, что оно должно работать в этой конкретной ситуации, но не делает. Я потратил изрядное количество времени, пытаясь вызвать join
работать в подобной проблеме к Вашему на этом сайте, названном: Присоединение к двум файлам с уникальным идентификатором.
Подход к решению Вашего использования задач join
прошел бы примерно так:
$ join -a1 -1 1 -2 1 -o 1.1 1.2 1.3 1.4 2.2 2.3 <(sort file_1.txt) <(sort file_2.txt)
R10 C1 C2 C3
R1 C1 C2 C3
R2 C1 C2 C3
R3 C1 C2 C3
R4 C1 C2 C3 C4_new C5_new
R5 C1 C2 C3
R6 C1 C2 C3 C4_new C5_new
R7 C1 C2 C3 C4_new C5_new
R8 C1 C2 C3
R9 C1 C2 C3 C4_new C5_new
Как видете join
потребности поместить Ваши файлы в отсортированную форму, таким образом, для начинающих, если первоначальный заказ Ваших файлов важен, эта опция могла бы создать проблемы там.
Дополнительно нет никакого способа сказать join
условно распечатать значение столбца из одного из файлов или другого или на основе его значения или на основе присутствия значения или отсутствия значения.
Другой подход с join
могло бы быть это:
$ join -a1 -1 1 -2 1 <(sort file_1.txt) <(sort file_2.txt)
R10 C1 C2 C3 C4 C5
R1 C1 C2 C3 C4 C5
R2 C1 C2 C3 C4 C5
R3 C1 C2 C3 C4 C5
R4 C1 C2 C3 C4 C5 C4_new C5_new
R5 C1 C2 C3 C4 C5
R6 C1 C2 C3 C4 C5 C4_new C5_new
R7 C1 C2 C3 C4 C5 C4_new C5_new
R8 C1 C2 C3 C4 C5
R9 C1 C2 C3 C4 C5 C4_new C5_new
Снова это близко к тому, что Вы хотите, но не позволяет, чтобы Вы использовали любую условную логику для печати столбца из одного файла или другого.
Эти работы, но мы должны были сломаться и получить некоторую внешнюю помощь от awk
опустить запаздывающие столбцы, которые перемещены, когда их дубликаты существуют в file_2.txt
.
$ join -a1 -1 1 -2 1 -o 1.1 1.2 1.3 1.4 2.2 2.3 1.5 1.6 1.7 <(sort file_1.txt) <(sort file_2.txt) | awk '{$7=$8=""}1'
R10 C1 C2 C3 C4 C5
R1 C1 C2 C3 C4 C5
R2 C1 C2 C3 C4 C5
R3 C1 C2 C3 C4 C5
R4 C1 C2 C3 C4_new C5_new
R5 C1 C2 C3 C4 C5
R6 C1 C2 C3 C4_new C5_new
R7 C1 C2 C3 C4_new C5_new
R8 C1 C2 C3 C4 C5
R9 C1 C2 C3 C4_new C5_new
Соединение имеет очень узкую нишу, где это может быть полезный инструмент. Для типа замены проблемы, которая Ваш является, больше встроенное с, инструмент такой как awk
, perl
, или sed
было бы лучшее соответствие.