Bash - 将一个字符串替换为另一个文件中的另一个字符串

时间:2013-08-22 08:57:10

标签: regex replace sed awk

我有两个已排序的文本文件。文件A的数据如下所示:

adam
humanities

antwon
sciences

bernard
economics

castiel
sciences

dmitri
informatics

zoe
mathematics

文件B的数据如下所示:

adamburnston
antwonreed
justbernard
castiel
dmitrivalchenkov
zoematthews

我需要用文件B(adamburnston)中的行替换文件A(adam)中的行。这两个文件都按字母顺序排列,并包含相同数量的条目。我如何实现这一结果?

预期产出:

adamburnston
humanities

antwonreed
sciences

justbernard
economics

castiel
sciences

dmitrivalchenkov
informatics

zoematthews
mathematics

2 个答案:

答案 0 :(得分:3)

以下管道有效:

sed '2~3!d' A | paste -d $'\n' B - | sed $'3~2i\n'

第一部分告诉GNU sed打印第二行,然后是第三行。 paste使用换行符作为分隔符,将B与第一个sed的输出合并。最后一行在每对行之后添加换行符。

答案 1 :(得分:2)

这个awk应该可以工作:

awk 'FNR==NR{a[i++]=$0;next} NF>0{c++; if (c%2==0) print a[j++] ORS $0 ORS}' fileB fileA