Сравнение данных в 2 файлах csv по столбцам, ввод из 3-го файла

This method may not suit your use-case, though I usually put additional domains into virtual(5):

# postconf relay_domains virtual_alias_maps
relay_domains = $mydestination
virtual_alias_maps = hash:/etc/postfix/virtual

Where $mydestination contains the equivalent of your first domain domain and hostnames. The virtual map then contains:

otherdomain.edu   anything
someone@otherdomain.edu    foo@firstdom.edu
...
-1
16.02.2018, 12:39
1 ответ
#!/bin/bash

join -t, file_1 file_2 | join -t, - file_3 |
awk -F, '
NR == 1 {
    fields_num = (NF + 1) / 2

    for(i = 1; i <= fields_num; i++)
        field_names[i] = $i
}
NR != 1 {
    item = $1 "\t"

    for(i = 2; i <= fields_num; i++) {
        cmp_num = i + fields_num - 1

        if($i != $cmp_num) {
            printf "%s%s=%s\t%s=%s\n",
                    item,
                    field_names[i], $i,
                    field_names[i], $cmp_num

            item = "\t"
        }

    }
}'

Было сделано несколько предположений:

  1. Столбец для сравнения всегда первый.
  2. Все файлы отсортированы по первому столбцу(Aполю ).
  3. Сравниваются только те элементы, которые встречаются в обоих файлах(file_1и file_2). Так, если в file_1есть элемент 2, а в file_2нет, эта строка исключается из сравнения.

Вход

tail -n +1 -- file_*

==> file_1 <==
A,B,C,D,E,F,G
1,2,3,4,5,5,7
7,6,5,2,3,2,1

==> file_2 <==
A,B,C,D,E,F,G
1,2,3,1,4,6,7
7,6,6,4,3,2,1

==> file_3 <==
A
1
2
7

Выход

1   D=4 D=1
    E=5 E=4
    F=5 F=6
7   C=5 C=6
    D=2 D=4
0
28.01.2020, 05:12

Теги

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