我想要比较两个大小约为 40 MB 的以逗号分隔的值的文件,其行如下:
hstar,默认,"T9883Z ",0d59,c801,7332,5,20120914,4.343618767
对于这两个文件,4.343618767
上面示例中的最后一个条目在两个文件之间有所不同,但几乎所有其他字段都完全匹配。
我需要对这两个文件进行差异分析,以找出两个文件之间除最后一个条目之外的几个不同的地方。
我认为最简单的方法是使用 SED 处理这两个文件并规范化最后一个字段,查找第七个逗号后的数字模式并在每一行上用固定字符串(如 9.999999999)替换它,然后简单的差异就可以了。
但是,我不确定如何构造 sed 命令来定位第七个逗号,并用固定字符串替换行末的剩余字符串。这样的 sed 命令是什么样子的?我想我需要使用正则表达式,但不确定如何在第七个逗号后开始模式。
答案1
你不必寻找第七列。只需找到最后一列:
sed 's/,[^,]*$/,9.9999999999/'
解释:
, match the comma
[ beginning of a character group
^ negation, i.e. do not match the following characters
, comma
] end of a character group
* repeat the preceding thing zero or more times
$ match the end of line
答案2
Awk 是一个处理表格数据更简洁的工具:
awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file1 > temp1
awk -F ',' ' { print $1,$2,$3,$4,$5,$6 }' file2 > temp2
diff temp1 temp2
答案3
sed "s/,[0-9].[0-9]\+\$//" <yourfile>
将输出如下行:
hstar,默认,“T9883Z”,0d59,c801,7332,5,20120914