Соответствие двум файлам для подобной первой строки

Если SNMPD работает, можно запросить значения загрузки этих машин с простым snmpget. При сценариях этого, можно отсортировать их со значением загрузки и произвести самые низкие четыре...

2
14.02.2013, 16:08
2 ответа

Попытайтесь делать это использования вместо grep, это более подойдет:

$ join  <(sort file1) <(sort file2)

1111 Roger
3333 Oscar
4444 Roy
6666 Patrick

Если Ваши замены процесса отсутствия оболочки <( ), можно сделать:

sort file1 > new_file1
sort file2 > new_file2
join new_file1 new_file2

Doc сказал:

соедините записи со стандартным выводом строка для каждой пары входных строк, которые имеют идентичные объединяющие поля.

См. http://www.gnu.org/software/coreutils/manual/html_node/join-invocation.html

Примечания:

Потребность файла, которая будет отсортирована на ключе сортировки для join для работы правильно вот почему мы используем некоторые дескрипторы файлов в фоновом режиме с помощью замен процесса, См. http://mywiki.wooledge.org/ProcessSubstitution или http://mywiki.wooledge.org/BashFAQ/024 для общего использования.

4
27.01.2020, 22:01
  • 1
    Сначала один работал как очарование! Можно ли объяснить быстро, как функция соединения воздействует на эти два файла? результат –  Arne 14.02.2013, 14:48
  • 2
    , Это не функция, а исполняемый файл, см. gnu.org/software/coreutils/manual/html_node / … –  Gilles Quenot 14.02.2013, 14:56
  • 3
    Видит мое отредактированное сообщение. –  Gilles Quenot 14.02.2013, 14:59
  • 4
    Если Вы думаете, что ответ полезен, Вы можете 'upvote' он. Если Вы думаете, что ответу хорошо отвечают, можно 'принять' его путем нажатия на схему checkmark (будет зеленым), этот путь, люди, ищущие stackexchange веб-сайт, будут известный, что на вопрос хорошо отвечают. Это - то, как stackechange работы веб-сайтов, ;) –  Gilles Quenot 14.02.2013, 15:36
  • 5
    спасибо, Вероятно, не проблема в этом случае, но это более безопасно к виду на объединяющем поле, даже когда то поле является первым, потому что sort (в зависимости от локали), рассмотрит дополнительное пространство перед полем, в то время как join проигнорирует его и возможно сообщит о "неотсортированной входной ошибке". join <(sort -k1,1 file1) <(sort -k1,1 file2). –  Stéphane Chazelas 14.02.2013, 15:59

grep строки соответствий, где имя пользователя совпадает с идентификатором. join правильно ограничивает соответствие первым полем, но требует отсортированного входа. В зависимости от входа awk могла бы быть хорошая альтернатива:

awk 'FNR == NR { ids[$1]++; next } ids[$1]' ids users

Или более читаемый:

awk 'FNR == NR { ids[$1]; next } $1 in ids' ids users

Вывод:

1111 Roger
3333 Oscar
4444 Roy
6666 Patrick

Объяснение

awk программа разделена на две части: тот, который оценен для первого файла и того, который оценен для второго файла.

Первый блок только оценен для первого файла и сохраняет идентификаторы в ids массив. Когда с этими идентификаторами встречаются при чтении users блок по умолчанию вызывается ({print $0}).

0
27.01.2020, 22:01

Теги

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