Заменить слова в списке словами в другом списке, которые разделяют некоторые буквы - PullRequest
0 голосов
/ 28 июня 2018

У меня очень длинный список слов (с дублированием), подобный этому:

list1.txt

Apple
Pear
Banana
Banana
Banana
Banana
Orange
Orange

Я хочу заменить каждое слово в list1.txt другим списком слов (без дублирования), list2.txt, который содержит те же слова, что и list1.txt, плюс еще кое-что:

list2.txt

Apple_red
Pear_green
Banana_yellow
Orange_orange

Мне нужен вывод, подобный этому:

list3.txt

Apple_red
Pear_green
Banana_yellow
Banana_yellow
Banana_yellow
Banana_yellow
Orange_orange
Orange_orange

Есть предложения? Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это может работать для вас:

uniq list1.txt | paste -d/ - list2.txt | sed 's#.*#s/&/#' | sed -f - list1.txt
  • Удалить дубликаты из list1.txt
  • Соедините list1.txt и list2.txt, используя / в качестве разделителя.
  • Создайте скрипт подстановки sed из результата выше.
  • Применение сценария sed к исходному файлу list1.txt
0 голосов
/ 28 июня 2018

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

awk -F'_' 'NR==FNR{a[$1]=$0; next} {print a[$1]}' list2.txt list1.txt

Apple_red
Pear_green
Banana_yellow
Banana_yellow
Banana_yellow
Banana_yellow
Orange_orange
Orange_orange
...