helpid 发表于 2012-11-27 15:44

求一个文件内容比较脚本(按指定列进行比较)

本帖最后由 helpid 于 2012-11-27 15:44 编辑

求一个文件内容比较脚本(按指定列进行比较)
awk、sed、perl、bash shell 都可以

本来想用hashmap来做,但是查了下好像shell没有相关信息

以下面fileA 、fileB 两个文件为例:
只比较列1、列2; 列3忽略不做比较
文件记录数不一样;
列分割符为"|";

A. 当fileA与fileB当前行的列2不相同时:
   1. 把fileA中的当前行记录写入diffA
   2. 把fileB中的当前行记录吸入diffB(如果当前行为空白则不写入)
B. 当fileA与fileB当前行的列2相同, 但列1不相同时:
   1. 把fileA中的当前行记录写入diffA
   2. 把fileB中的当前行记录吸入diffB
   
fileA (15行)内容:(# 后的内容为注释, 实际文件中不存在)A|02942|20121126111458# 相同记录(忽略第3列)
A|03055|20121126110255# 相同记录(忽略第3列)
A|08931|20121126133649# 写入diffB(fileB没有该记录)
A|08932|20121126133743# 写入diffA(与fileB的列1不相同)
A|27822|20121126212704# 相同记录(忽略第3列)
A|31520|20121126153305# 写入diffB(fileB没有该记录)
A|31612|20121126103716# 写入diffB(fileB没有该记录)
D|40439|20121126193846# 写入diffA(与fileB的列1不相同)
D|43223|20121126113926# 写入diffB(fileB没有该记录)
A|45789|20121126142204# 写入diffB(fileB没有该记录)
A|46651|20121126143730# 写入diffB(fileB没有该记录)
A|49212|20121126152429# 写入diffB(fileB没有该记录)
A|52009|20121126173141# 写入diffB(fileB没有该记录)
A|60524|20121126171733# 写入diffA(与fileB的列1不相同)
A|61257|20121126113339# 写入diffA(与fileB的列1不相同)fileB (12行)内容:(# 后的内容为注释, 实际文件中不存在)A|02942|20071128200822# 相同记录(忽略第3列)
A|03055|20071128200827# 相同记录(忽略第3列)
D|08932|20071128201524# 写入diffB(与fileA的列1不相同)
D|13992|20091212125210# 写入diffB(fileA没有该记录)
D|21780|20071128202710# 写入diffB(fileA没有该记录)
A|27822|20071128203440# 相同记录(忽略第3列)
D|29558|20071128203708# 写入diffB(fileA没有该记录)
A|34079|20071128204308# 写入diffB(fileA没有该记录)
D|34619|20071128204330# 写入diffB(fileA没有该记录)
A|40439|20071128204933# 写入diffB(与fileA的列1不相同)
D|60524|20121126171733# 写入diffB(与fileA的列1不相同)
D|61257|20121126113339# 写入diffB(与fileA的列1不相同)目标文件: diffA (# 后的内容为注释, 实际文件中不存在)A|08931|20121126133649# fileB没有该记录
A|08932|20121126133743# 与fileB的列1不相同
A|31520|20121126153305# fileB没有该记录
A|31612|20121126103716# fileB没有该记录
D|40439|20121126193846# 与fileB的列1不相同
D|43223|20121126113926# fileB没有该记录
A|45789|20121126142204# fileB没有该记录
A|46651|20121126143730# fileB没有该记录
A|49212|20121126152429# fileB没有该记录
A|52009|20121126173141# fileB没有该记录
A|60524|20121126171733# 与fileB的列1不相同
A|61257|20121126113339# 与fileB的列1不相同目标文件: diffB (# 后的内容为注释, 实际文件中不存在)D|08932|20071128201524# 与fileA的列1不相同
D|13992|20091212125210# fileA没有该记录
D|21780|20071128202710# fileA没有该记录
D|29558|20071128203708# fileA没有该记录
A|34079|20071128204308# fileA没有该记录
D|34619|20071128204330# fileA没有该记录
A|40439|20071128204933# 与fileA的列1不相同
D|60524|20121126171733# 与fileA的列1不相同
D|61257|20121126113339# 与fileA的列1不相同
页: [1]
查看完整版本: 求一个文件内容比较脚本(按指定列进行比较)