Как различить два списка ключевых слов? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть два файла информации о версии следующей формы:

$ cat file1
cabal 2.2.0.1
http 4000.3.12
hunit 1.6.0.0
only 0.1
...

Я ищу (желательно простые) способы их сравнения с использованием инструментов командной строки, что позволяет мне создавать такие вещи, как 1. все строки в file1, где имя вообще не отображается в file2 2. строки вида name <v1> <v2> для имен, которые отображаются в обоих файлах

Я думал, что у меня был правильный ингредиент, когда я обнаружил diff -y, но это иногда помещает разные имена в одну строку.

Ответы [ 2 ]

1 голос
/ 28 мая 2019
  1. все строки в file1, где имя вообще не отображается в file2

Требуется GNU awk для отсортированных результатов.

$ gawk 'NR == FNR { packages[$1] = $0; next }
        { delete packages[$1] }
        END { PROCINF0["sorted_in"] = "@ind_str_asc";
              for (p in packages) print packages[p] }' file1 file2
строки вида name <v1> <v2> для имен, которые отображаются в обоих файлах

Для этого файла необходимо отсортировать файлы в первом столбце.

$ join file1 file2
0 голосов
/ 28 мая 2019

Вот неправильное решение, которое я нашел, используя python:

> a = open('file1').read().splitlines()
> a = [l.split() for l in a]
> a = {k: v for (k, v) in a}
# same for b
> diff = {k: v for (k, v) in a.items() if k not in b}
> open('diff','w').write('\n'.join('{} {}'.format(k, v) for (k, v) in diff.items())
...