Вопрос немного озадачивает меня, не в последнюю очередь из-за канала (на tee
), который вы, очевидно, хотите использовать. Чтобы поддерживать эту функциональность, вы можете использовать следующий скрипт:
#!/bin/ksh
tee output.file < <( java DemoJavaProgram ) &
Вот именно. Сценарий завершится, java-программа продолжит работу в фоновом режиме, а данные, выводимые java-программой на стандартный вывод, будут скопированы как на стандартный вывод, так и на output.file
.
Я отмечаю, что простой запуск ps -aux | grep scriptName.ksh
может ввести вас в заблуждение, полагая, что сценарий все еще выполняется, поскольку подстановка процесса <(...)
, скорее всего, выполняется в/из процесса подоболочки, который носит имя исходного сценария, но на самом деле ребенок tee
. Родительский сценарий, т. е. вышеприведенный скрипт, будет мертв, что должно быть очевидно из значения PPID (, т. е. родительского PID ), которое вы можете проверить, например, ps -o pid,ppid,tty,comm -H
.
awk 'NR==FNR{ snp[$3]=$NF; next }
{ $6=($3 in snp)?(FNR==1?"AN1":snp[$3]):"0" }1' file2 file1
Вещи вawk
:
NR
:Общее количество входных записей, просмотренных на данный момент. FNR
:Номер входной записи в текущем входном файле и сбрасывается до 1 для следующего входного файла.
Таким образом, условие NR==FNR
всегда будет истинным только для первого входного файла, и следующий блок NR==FNR {... }
будет выполняться, когда оно истинно, и мы сохраняем значение последнего столбца $NF
в массив awk snp
со столбцом $3
в качестве ключей.
next
заставляет awk пропустить выполнение остальной части кода и начать заново, и если NF==FNR
по-прежнему верно, он будет повторять обработку этого блока до тех пор, пока не будут прочитаны все записи/строки первого входного файла.
затем в следующем блоке мы добавляем/обновляем значение столбца $6
с указанными ниже условиями:
snp
из файла 2, выполните :AN1
snp[$3]
. 0
. awk idom1
используется для печати результата в конце концов.