Предположим, что ваш первый большой файл имеет имя target.txt
, а второй файл меньшего размера — source.txt
.
tail +3 source.txt | while IFS= read -r line; do grep "$line" target.txt > "$line"; done
tail +3 source.txt
:удалить первые две строкиsource.txt
| while IFS= read -r line; do <FOO>; done
:передает этот усеченный файл в конструкцию while read
. Это будет перебирать каждую строку усеченного source.txt
, выполняя <FOO>
для каждой строки. grep "$line" target.txt > "$line"
:для каждой строки source.txt
, выполните grep для нее в target.txt
, затем запишите в файл с тем же именем, что и исходная строка, которую вы искали. Небольшой комментарий. :Если source.txt
на самом деле содержит фиксированные строки вместо шаблонов, вы можете использовать опцию -F
для grep
.
Если вы используете это на машине с GNU nohup (, например. настольный/серверный Linux ), nohup не только установит расположение сигнала SIGHUP
на «игнорировать» и перенаправит стандартный вывод/stderr на nohup.out
, но , если его стандартный ввод является терминалом , также перенаправить stdin из /dev/null
, открытого в режиме только запись -, так что любое чтение приведет к ошибке.
Когда фоновая команда запускается из скрипта, т.е. foo &
, его stdin уже перенаправлен из /dev/null
, открытого в режиме read -only , такого перенаправления не произойдет, и любое чтение из него приведет к EOF вместо ошибки.
Таким образом, вы можете моделировать поведение nohup скриптом в терминале с помощью:
(trap '' HUP; command 0>/dev/null >logfile 2>&1 &)