用共享一些字母的另一个列表中的单词替换列表中的单词

时间:2018-06-28 10:50:15

标签: shell awk sed replace grep

我有很长的单词列表(重复),如下所示:

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 :(得分:1)

您可以使用此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

答案 1 :(得分:0)

这可能对您有用:

uniq list1.txt | paste -d/ - list2.txt | sed 's#.*#s/&/#' | sed -f - list1.txt
  • 从list1.txt删除重复项
  • 使用/作为分隔符来加入list1.txt和list2.txt。
  • 根据上述结果创建sed替换脚本。
  • 将sed脚本应用于list1.txt原始文件