LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1014|回复: 14

合并两个已按序排列的文件——初学者问

[复制链接]
发表于 2006-8-5 17:18:38 | 显示全部楼层 |阅读模式
大致如下
文件A
1
abc
2
def

文件B
1
ABC
2
DEF

合并后
1
abc
ABC
2
def
DEF

请教用什么命令
发表于 2006-8-6 21:28:38 | 显示全部楼层
合并后再排序得了,管它是不是已排序的。
当然,如果有这样的命令也不错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-7 14:03:55 | 显示全部楼层
Post by waq
合并后再排序得了,管它是不是已排序的。
当然,如果有这样的命令也不错


我想知道是不是已经有那个命令
能作到上述“合并后”的效果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-7 14:04:44 | 显示全部楼层
Post by waq
合并后再排序得了,管它是不是已排序的。
当然,如果有这样的命令也不错


我想知道是不是已经有哪个命令
能作到上述“合并后”的效果

发重拉
请删拉这个
回复 支持 反对

使用道具 举报

发表于 2006-8-7 15:01:21 | 显示全部楼层
对于你的帖子中给出的情况,可以这样做:
  1. paste a.txt b.txt | sed 's/\([0-9][0-9]*\)\t[0-9][0-9]*/\1/' | sed 's/\t/\n/'
复制代码

解释:
paste a.txt b.txt 按列合并两个文件。a.txt 和 b.txt的第一行用TAB分隔,其它行也一样。合并后成为
1<TAB>1
aaa<TAB>AAA
2<TAB>2
bbb<TAB>BBB

sed 's/\([0-9][0-9]*\)\t[0-9][0-9]*/\1/' 把1<TAB>1替换为1,内容成为
1
aaa<TAB>AAA
2
bbb<TAB>BBB

sed 's/\t/\n/' 把<TAB>替换为回车,成功!

如果你的情况与你的帖子有差异,你自己分析吧。
回复 支持 反对

使用道具 举报

发表于 2006-8-7 15:11:58 | 显示全部楼层
据我所知,没有这样的命令。。。
回复 支持 反对

使用道具 举报

发表于 2006-8-7 15:17:25 | 显示全部楼层
Post by ideawu
对于你的帖子中给出的情况,可以这样做:
.
.

如果2个文件不对称的话,你这个方法就失效了噢。。。
回复 支持 反对

使用道具 举报

发表于 2006-8-7 15:41:55 | 显示全部楼层
好像没有,先cat或者paste合并
然后在sort吧
回复 支持 反对

使用道具 举报

发表于 2006-8-7 15:41:57 | 显示全部楼层
好像没有,先cat或者paste合并
然后在sort吧
回复 支持 反对

使用道具 举报

发表于 2006-8-7 17:26:02 | 显示全部楼层
Post by 终极幻想
如果2个文件不对称的话,你这个方法就失效了噢。。。

是的,没有万能的方法。只能靠楼主具体情况具体分析了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表