Я считаю, что проблема в том, что когда сеанс SSH закрыт ( нажатие ctrl-c или закрытие xterm), процессу отправляется HUP. Чтобы выполнить ветвление процесса в фоновом режиме, добавьте &
, а для блокировки hup используйте nohup
:
ssh (hidden) 'nohup sleep 300> / dev / null 2> / dev / null dev / null & '
SSH должен запуститься, и процесс будет выполняться на example.com в фоновом режиме.
Если вы хотите отслеживать его прогресс, вы можете использовать screen
, если вы хотите это сделать, то поможет что-то похожее на это:
ssh (hidden) -t 'screen -D - RR -S this / bin / sleep 300 '
Это создает сеанс экрана с именем' this '(-S), отсоединяет уже работающий экран, если он подключен в другом месте, и снова подключается сюда. Затем запускает / bin / sleep с 5-минутным ожиданием.
awk
и join
не подходят для этого.
sed '/^$/q' file1; sort -snmk2,2 <(sed '1,/^$/d' file1) <(sed '1,/^$/d' file2)
С современным (версия > 4. 0) GNU awk, вы могли бы
awk '
FNR>4 {a[$0]=$2; next};
NR==FNR;
END {
PROCINFO["sorted_in"] = "@val_num_asc";
for (i in a) print i;
}
' file1 file2
Пояснение:
FNR>4 {a[$0]=$2; next};
создать массив полей сортировки не-заголовочных строкNR==FNR;
оценивает TRUE только для первого файла, и достигается только для FNR>4
, вызывая печать заголовочных строк для первого файлаPROCINFO["sorted_in"] = "@val_num_asc"
отсортировать массив по значению (т.е. по хранимому полю $2)for (i in a. т.е. сохраненное поле $2)
for (i in a) print i
print indices сортированного массива (которые являются сохраненными строками без заголовков)Тестирование
$ awk 'FNR>4 {a[$0]=$2; next}; NR==FNR; END {PROCINFO["sorted_in"] = "@val_num_asc"; for (i in a) print i;}' file1 file2
header 1
header 2
header 3
lemur 3 dd
cat 4 aa
alligator 4 ca
dog 5 ab
ostrich 10 cd
fish 13 cc
lemming 16 ad
Использование оболочки с заменой процесса (ksh93
, bash
,...)(см. конец для замены процесса -бесплатная альтернатива):
cat <( head -n 3 file1 ) \
<( sort -k2,2n <( tail -n +4 file1 | tr -s ' ' '\t' ) \
<( tail -n +4 file2 | tr -s ' ' '\t' ) | uniq )
Это приведет к:
header 1
header 2
header 3
lemur 3 dd
alligator 4 ca
cat 4 aa
dog 5 ab
ostrich 10 cd
fish 13 cc
lemming 16 ad
Команда объединяет строки заголовков file1
с результатом операции сортировки. Сортировка выполняется численно по второму полю некоторого ввода, и любые повторяющиеся строки (аллигаторы, лемуры и лемминги )удаляются с uniq
из результата.
Входными данными для сортировки будет заголовок -за вычетом содержимого как file1
, так и file2
, пропущенный через tr
для замены последовательных пробелов одиночными вкладками (между столбцами было нечетное количество пробелов в примере данных ).
Результатом является табуляция -с разделителями.
Эквивалентный способ с использованием тех же инструментов:
cat <( head -n 3 file1 ) \
<( sort -k2,2n <( cat <( tail -n +4 file1 ) \
<( tail -n +4 file2 ) | tr -s ' ' '\t' ) | uniq )
Без cat
s и замены процесса:
{ head -n 3 file1;
{ tail -n +4 file1; tail -n +4 file2; } | tr -s ' ' '\t' | sort -k2,2n | uniq; }