Возьмите первый столбец из 2 файлов и запишите это в 3-й файл

Если Вы хотите отсоединить процесс от текущей оболочки вместо того, чтобы запустить его как фоновое задание с xdg-open http://www.google.com &, Мне нравится detach утилита:

detach xdg-open http://www.google.com

Можно было создать псевдоним для этого. Мне нравится detach nohup как закрывает stdin stdout и stderr по умолчанию, таким образом, его вызов является более чистым.

5
10.11.2014, 22:16
3 ответа

Вы можете использовать линии NL и используйте Присоединяйтесь

join -o 1.2,2.2 <(nl ABC.txt) <(nl PQR.txt) > OUT.file

Или по CAT -N

join -o 1.2,2.2 <(cat -n ABC.txt) <(cat -n PQR.txt) > OUT.file

, как , аналогичный , анализ двух файлов ввода в / во время петли Вы можете использовать только встроенные вполнения Bash

while read -u 3 a b && read -u 4 c d
do
  echo "$a $c"
done 3< ABC.txt 4< PQR.txt >OUT.txt
5
27.01.2020, 20:32

Предполагая, что поля разделены одним пространством в входных файлах, я бы написал:

paste -d " " ABC.txt PQR.txt | cut -d " " -f 1,3 > Output.txt

обрабатывать произвольные пробелы и более 2 столбцов на файл, и предполагая, что ваша оболочка - это Bash / ksh / zsh (?)

paste -d " " <(awk '{print $1}' ABC.txt) <(awk '{print $1}' PQR.txt) > Output.txt
4
27.01.2020, 20:32

Вместо этого используйте более низкоуровневую форму копирования файлов путем локального переноса cat и переноса их в удаленную команду cat > filename на priv-server :

$ cat file1.txt | ssh -A user@pub-server 'ssh user@priv-server "cat > file1.txt"'

или со сжатием:

$ gzip -c file1.txt | ssh -A user@pub-server 'ssh user@priv-server "gunzip -c > file1.txt"'

Outtake from man ssh :

-A Разрешает пересылку соединения агента аутентификации. Это также можно указать для каждого хоста в файле конфигурации.

-t Принудительное псевдо-распределение. Это может быть использовано для выполнения произвольных экранных программ на удаленной машине, которые могут быть очень полезны, например, при реализации услуг меню. Несколько опций -t принудительно распределяют tty, даже если ssh не имеет локального tty.


Я изначально не знал ответа, но после хорошего ночного сна и написания этого вопроса я увидел проблему с командой, которую я пытался первоначально, исправил ее, и она сработала. Но поскольку это кажется полезным делом, я решил поделиться ответом.

-121--105564-

Это было бы просто, если бы вы попробовали собственный sshfs , который был недавно добавлен.

Установите sudo apt-get install sshfs

sshfs -ttA user@pub-server ssh user@priv-server

Это сделает магию.

Для получения дополнительной информации см. Журнал Linux

-121--105565-

Вот несколько способов:

  • с помощью paste и cut :

     $ paste -d '' < (cut -d '-f 1 ABtC.xt) < (cut -d' -f 1
    ABC PQR
    

    Если система не поддерживает подстановку процессов, используйте следующее:

     $ cut -d '-f 1 ABC.txt >/tmp/aa; cut -d '' -f 1 PQR.txt >/tmp/bb; вставить -d ''/tmp/aa/tmp/bb
    
  • Использование awk (спасибо @ Costas):

     awk 'FNR = = NR {a [FNR] = $1; следующий} {печать [FNR], $1} 'ABC.txt PQR.txt > output.txt
    

    Специальная переменная FNR - номер строки текущего входного файла, а NR - номер строки ввода в целом, независимо от файла, из которого он получен. Они равны только во время чтения первого входного файла. Таким образом, первые поля первого файла сохраняются в массиве a ( a [FNR] = $1 ), ключи которого являются номерами строк, а значения - 1-м полем. Затем, при достижении второго файла, печатаем значение, соответствующее его номеру строки ( a [NR] ) и 1-му полю текущей строки.

7
27.01.2020, 20:32

Теги

Похожие вопросы