有没有办法巧妙地合并两个文件?

有没有办法巧妙地合并两个文件?

我有两个文件,其中一些行是相同的。

文件A:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}

文件B:

command 5
command 3
command 1{
    some code lines
}

我想要一个包含以下内容的最终文件:

command 1{
    some code lines
}
command 2
command 3
command 4{
    some code lines
}
command 5

行的顺序不相关。是否有现有的工具(或命令)可以做到这一点?

答案1

我意识到这应该是评论答案。

我不记得是否有一个工具可以做到这一点。!您可以通过cat'ing文件然后使用sortuniq来完成这项工作来达到确切的效果:

cat A B | sort | uniq

这会将两个文件的内容放在一起,然后对行进行排序并删除任何重复项。

结果输出:

command 1
command 2
command 3
command 4
command 5

答案2

据我所知,没有任何工具可以按照您所示的方式合并文件。大多数合并/比较工具的工作原理是在各行周围有一定程度的上下文,以便该工具知道两个文件可以在不同的地方放在一起。

您所展示的内容没有任何真实的上下文,因此我不知道这些工具如何能够做到这一点。

答案3

你可以这样做:

sed -e 's/_/_u/g;s/%/_p/g;/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr '%\n' '\n%' |
  sed 's/%//g;s/_p/%/g;s/_u/_/g'

如果文件不包含该%字符,您可以将其简化为:

sed -e '/{$/s/^/%/;/{$/,/}$/b' -e 's/^/%/' A B |
  tr '%\n' '\n%' |
  sort -u |
  tr -d '\n' |
  tr % '\n'

相关内容