Сравните подобный файл и не подобный дисплей файлов ниже вывода в awk?

Поскольку в первом случае 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' {} \;" \;
2
29.09.2015, 00:00
1 ответ

Возможно:

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)
3
27.01.2020, 22:06
  • 1
    эти два файла. для строки, имеющей дату, характерную для двух файлов, .i хотят каждую дату из файла. я хочу, сравнивают дату также и 2$ от file1, 2$ от file2. например, файл 1 имеет дату, но 2$ не имеют значение или данные, которые должны быть пробелом или (-). –  ganik 17.07.2013, 23:29
  • 2
    @ganik, это что -a опция для. Вы попробовали его? –  Stéphane Chazelas 17.07.2013, 23:30
  • 3
    +1. Сделайте вывод симпатичным с column -t –  glenn jackman 18.07.2013, 01:08
  • 4
    @StephaneChazelas - Я надеюсь, что Вы не возражаете, но я развернул Ваш ответ, так как это является лучшим. Спасибо за пример в использовании join. Я никогда не знал, как использовать его до сих пор благодаря Вам! –  slm♦ 18.07.2013, 04:30
  • 5
    Для пользы полноты, возможно, упомяните это join требует отсортированного входа. –  tripleee 18.07.2013, 09:28

Теги

Похожие вопросы