![有没有办法巧妙地合并两个文件?](https://linux22.com/image/49788/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%B7%A7%E5%A6%99%E5%9C%B0%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F%20.png)
我有两个文件,其中一些行是相同的。
文件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文件然后使用sort
和uniq
来完成这项工作来达到确切的效果:
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'