Заменить слова в файле 2, получив список замен из файла 1

Файл кота 1

ABC,23
DFG,45
Ghj,678

Cat File2

Listed LinkedIn yellow ABC
Fixed DFG linked ABC
Holiday Europe Ghj DFG

Мне нужен вывод, как показано ниже

Listed LinkedIn yellow 23
Fixed 45 linked 23
Holiday Europe 678 45
1
задан 5 September 2015 в 04:39

2 ответа

Преобразовать file1 в команды для sed и использовать их для изменения file2:

sed -r 's/(.*),(.*)/s,\1,\2,/' file1 | sed -f - file2

Предполагается, что значения в file1 не содержат специальных символов и вы хотите для замены всех вхождений в file2.

3
ответ дан 23 May 2018 в 17:44

Вы можете использовать awk

awk 'FS="," {\
    if(NR == FNR) {\
        n[(FNR"")] = $0\
    } else {\
        a[($1)] = $2\
    }\
}\
END {\
    for (i in n) {\
        for (j in a) {\
            gsub(j,a[j],n[i])\
        }\
        print n[i]\
    }\
}' File2 File1

Пример

Входные файлы

cat foo [!d5 ]

ABC,23
DFG,45
Ghj,678

cat bar

Listed LinkedIn yellow ABC
Fixed DFG linked ABC
Holiday Europe Ghj DFG

Команда и выход

% awk 'FS="," { if(NR == FNR) {n[(FNR"")] = $0} else {a[($1)] = $2}}  END {for (i in n) {for (j in a) {gsub(j,a[j],n[i])} print n[i]}}' bar foo
Listed LinkedIn yellow 23
Fixed 45 linked 23
Holiday Europe 678 45
1
ответ дан 23 May 2018 в 17:44

Другие вопросы по тегам:

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