Используйте параметры контекстного вывода для grep
. Если вам нужны три строки после каждого появления времени
в (скажем) всех файлах в каталоге:
grep -A3 'time' /path/to/files/*
grep
имеет три контекстных параметра - A
для строк после матч; B
для строк до совпадения и C
для полного контекста (строки до и после совпадения). Если вы хотите дополнительно разделить вывод grep
и знаете, что каждое совпадение даст четыре строки вывода, вы можете направить вывод в split -l4
.
Поля не совпадают (по крайней мере, в примере) Вызываемый файл «full csv» имеет поле «PSEUDO BITHDAY», тогда как второй файл имеет поле «PSEUDO BI R THDAY». Во втором файле имеется дополнительный R.
Опция -t хорошо работает во всех выпусках соединения.
ПРАВКА: Ваш пример работает для меня
bash-4.1$ join -t, a b
NAIN GENIEUR 01/01/1917,C,D
bash-4.1$ join --version
join (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel.
bash-4.1$
-121--289677- Ваша команда должна работать. Однако, по крайней мере в приведенном примере, в конце строки в file2
имеется космос. Это важно, это принимается как часть поля. Как вы видите, при удалении файла происходит ожидаемое соединение файлов:
$ join -t"," -j 1 file1 file2 ## no output
$ sed -i 's/ $//' file2 ## remove the trailing space
$ join -t"," -j 1 file1 file2 ## now it works
NAIN GENIEUR 01/01/1917,C,D
-121--289678- Более современные OSES защищают себя от такого рода неправильного использования по умолчанию, обычно путем установки пользовательских ограничений. Вероятно, поэтому система по-прежнему реагирует - она позволяет выделять память только до определенного объема, что значительно меньше, чем у машины.