Поскольку в первом случае grep
попытки fo находят 'MyClass' в именах файлов и во втором, он пытается найти 'MyClass' в содержании файла.
Первый равен
find . -type d -name 'mydir*' -exec find '{}' -name '*MyClass*.java' \;
в то время как второй равен
find . -type d -name 'mydir*' -exec sh -c \
"find '{}' -name '*.java' -exec grep 'MyClass' {} \;" \;
Возможно:
join -a 1 -a 2 -o 0,1.2,2.2 -e - file1 file2
Если в системе GNU (как большинство основанных на Linux дистрибутивов), можно узнать опции для join
с этой командой:
$ info coreutils 'join invocation'
или
$ info join
(принятие информационного каталога правильно сохраняется),
Или можно проверить спецификацию POSIX для наблюдения то, что, как гарантируют, будет работать через Нельды.
Вышеупомянутые опции следующие:
`-a FILE-NUMBER'
Print a line for each unpairable line in file FILE-NUMBER (either
`1' or `2'), in addition to the normal output.
Это покрывает Ваше требование для строк, не соединенных (где дата (объединяющее поле) не появляется в обоих) быть включенным.
`-o FIELD-LIST'
Construct each output line according to the format in FIELD-LIST.
Each element in FIELD-LIST is either the single character `0' or
has the form M.N where the file number, M, is `1' or `2' and N is
a positive field number.
Эта опция создает формат, который будет отображен для каждой строки вывода от join
. A 0
испускает поле, которое подбирается между этими 2 файлами. Это - дата. 1.2
2-й столбец из 1-го файла (file1) и 2.2
2-й столбец из 2-го файла (file2).
`-e STRING'
Replace those output fields that are missing in the input with
STRING.
Эта опция указывает, какой символ использовать для полей, которые отсутствуют или в file1 или в file2. Это - то, что генерирует -
, в окончательном результате.
Путем использования предложения @GlennJackman можно очистить вывод далее так, чтобы это было отформатировано приятно в равных размерных столбцах:
$ join -a 1 -a 2 -o 0,1.2,2.2 -e - file1 file2 | column -t
DATE DS DE
2012-08-02 1 -
2013-06-16 - 5
2013-06-17 - 1
2013-06-18 - 3
2013-06-19 - 1
2013-06-20 - 5
2013-06-21 - 6
2013-06-22 - 6
2013-06-23 1 6
2013-06-24 - 5
2013-06-25 - 9
2013-06-26 - 7
2013-06-27 2 22
2013-06-28 2 59
2013-06-29 779 334
2013-06-30 - 11
Обратите внимание, что входные файлы должны быть отсортированы на ключе соединения (по умолчанию первое поле). Выше, это не находится с тех пор в большинстве видов "ДАТЫ" локалей после "2013". Таким образом, это, как гарантируют, не будет работать всего join
реализации.
Вы могли пропустить первую строку с (ksh93
/zsh
/bash
синтаксис):
join -a 1 -a 2 -o 0,1.2,2.2 -e - <(tail -n +2 file1) <(tail -n +2 file2)
-a
опция для. Вы попробовали его? – Stéphane Chazelas 17.07.2013, 23:30column -t
– glenn jackman 18.07.2013, 01:08join
. Я никогда не знал, как использовать его до сих пор благодаря Вам! – slm♦ 18.07.2013, 04:30join
требует отсортированного входа. – tripleee 18.07.2013, 09:28