我需要比较具有以下结构的两个文件(new.txt 和 old.txt):
<Field1>,<Field2>,<Field3>,<Field4>,<Field5>,<Field6>
- 必须跳过公共行。
- 应将 new.txt 和 old.txt 中的类似行分组。如果 Field1、Field2、Field3、Field4 相同,我认为 old.txt 中的行与 new.txt 中的行相似。
- 其他独特的行应按文件名分组打印在下面
所以最终的任务是让视觉比较更容易。
添加部分: 示例。
$ cat old.txt
one,two,three,four,five,six
un,deux,trois,quatre,cinq,six
eins, zwei, drei, vier, fünf, sechs
$ cat new.txt
one,two,three,four,FIVE,SIX
un,deux,trois,quatre,cinq,six
en,två,tre,fyra,fem,sex
$cat comparison_result:
# lines are grouped. So it it easy to find the difference without scrolling.
old.txt> one,two,three,four,five,six
new.txt> one,two,three,four,FIVE,SIX
# end of task 2. There are no more simillar lines.
#
#start task 3.
#Printing all the rest unique lines of old.txt
echo "the rest unique line in old.txt"
eins, zwei, drei, vier, fünf, sechs
....
#Printing all the rest unique lines of new.txt
echo "the rest unique line in new.txt"
en,två,tre,fyra,fem,sex
这可以是第 1 步:跳过常用行。
# This is only in old.txt
comm -2 -3 <(sort old.txt) <(sort new.txt) > uniq_old
# This is only in new.txt
comm -1 -3 <(sort old.txt) <(sort new.txt) > uniq_new
我写了第 1 步,并将这个排序的差异作为临时解决方案:
# additional sort improves a bit diffs results.
diff <(sort uniq_old) <(sort uniq_new)
它正在工作,但并不理想。我拒绝使用 diff,因为它开始比较块,缺少公共行。
有没有更好的方法来满足上面写的 3 个要求?
我认为可以通过
- 对这种排序、diff 和 comm 命令进行了一些改进(将 sed/tr 添加到临时“隐藏”最后两个文件并比较其余文件)。
- awk
我想awk可以做得更好吗?