Объединение нескольких файлов с нулевыми значениями с помощью AWK - PullRequest
0 голосов
/ 12 марта 2020

Извините, я публикую это снова, как я испортил в своем предыдущем посте: мне интересно объединить несколько файлов (например, файл 1, файл2, файл 3 ...), используя совпадающие значения в столбце 1, и получить желаемый результат. Буду признателен за любую помощь, пожалуйста:

file1:

A 2 3 4
B 3 7 8
C 4 6 9

file2:

A 7 6 3
C 2 4 7 
D 1 6 4 

file3:

A 3 2 7 
B 4 7 3 
E 3 6 8 

Выход:

A 2 3 4 7 6 3 3 2 7
B 3 7 8 n n n 4 7 3
C 4 6 9 2 4 7 n n n
D n n n 1 6 4 n n n
E n n n n n n 3 6 8

1 Ответ

0 голосов
/ 12 марта 2020

Вот один для awk. Протестировано с GNU awk, mawk, original-awk ie. awk 20121220 и Busybox awk:

$ awk '
function nn(c,   b,i) {
    if(c)
        for(i=1;i<=c;i++)
            b=b "n "
    return b
}
FNR==1{nf+=(NF-1)}
{
    for(i=2;i<=NF;i++)
        b[$1]=b[$1] $i OFS
    a[$1]=a[$1] (n[$1]<(nf-NF+1)?nn(nf-NF+1-n[$1]):"") b[$1]
    n[$1]=nf+0
    delete b[$1]
}
END{
    for(i in a)
        print i,a[i] (n[i]<(nf)?nn(nf-n[i]):"") 
}' file1 file2 file3

Вывод:

A 2 3 4 7 6 3 3 2 7 
B 3 7 8 n n n 4 7 3 
C 4 6 9 2 4 7 n n n 
D n n n 1 6 4 n n n 
E n n n n n n 3 6 8 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...