次の構造の2つのファイル(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つの要求を満たすためのより良い方法はありますか?
私はそれができると思います
- このsort、diff、commコマンドのいくつかの改善(最後の2つのファイルを一時的に「非表示」にするためにsed / trを追加し、残りを比較します)。
- awk
私はawkがそれをより良くすることができると思いますか?