私はrec1.txtとrec2.txtという2つのファイルを持っています。
[gpadmin@subh ~]$cat ret1.txt
emcas_fin_bi=324
emcas_fin_drr=3294
emcas_fin_exp=887
emcas_fin_optics=0
emcas_gbo_gs=3077
そして
[gpadmin@subh ~]$ cat ret2.txt
emcas_fin_bi=333
emcas_fin_drr=5528
emcas_fin_exp=1134
emcas_fin_optics=0
emcas_fin_revpro=0
emcas_gbo_gs=3897
私が提供する比較は次のとおりです。
[gpadmin@subh ~]$ diff -y ret1.txt ret2.txt
emcas_fin_bi=324 | emcas_fin_bi=333
emcas_fin_drr=3294 | emcas_fin_drr=5528
emcas_fin_exp=887 | emcas_fin_exp=1134
emcas_fin_optics=0 emcas_fin_optics=0
emcas_gbo_gs=3077 | emcas_fin_revpro=0
> emcas_gbo_gs=3897
emcas_gbo_gsが一般的ですが、新しい単語で表示されるため、上記の出力が間違っていることがわかりました。
emcas_gbo_gs=3077 | emcas_fin_revpro=0
> emcas_gbo_gs=3897
希望の出力:-
emcas_gbo_gs=3077 | emcas_gbo_gs=3897
> emcas_fin_revpro=0
答え1
私はあなたがこのパターンに従う線を比較することに興味があると仮定します。
key=value
そして、与えられたファイルのキーの順序は重要ではありません。
ファイルの 1 つに末尾のスペースが含まれているので、最初に入力を削除するのが最善です。次のヘルパー関数は、より多くの操作を実行できます。 noneを削除します=
。先頭の空白文字と末尾の空白文字を削除します。また、隣接する空白文字も削除します=
。
sanitize() { grep '=' "$1" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[[:space:]]*=[[:space:]]*/=/'; }
別の機能(使用プロセスの交換、POSIXには適していません)
prepare() { diff <(sanitize "$1") <(sanitize "$2") | grep '^[<|>]' | sort -k 2 | uniq -u -f 1; }
変化をもたらすでしょう。次のように使用してください。
prepare ret1.txt ret2.txt
出力は次のとおりです。
< emcas_fin_bi=324 > emcas_fin_bi=333 < emcas_fin_drr=3294 > emcas_fin_drr=5528 > emcas_fin_exp=1134 < emcas_fin_exp=887 > emcas_fin_revpro=0 < emcas_gbo_gs=3077 > emcas_gbo_gs=3897
これはあなたが望む結果ではありませんが、かなり良いです。分析可能。すなわち、所望のほぼ全ての方法でさらなる処理が可能であることを意味する。たとえば、希望の形式(または少なくともそれに近い形式)を取得するには、およびawk
を使用できます。column
prepare ret1.txt ret2.txt | awk -F '[ =]' '
{ $1 == "<" ? L[$2]=$3 : R[$2]=$3 }
END {
for (key in L) if (key in R) print key"="L[key]"/|/"key"="R[key]
for (key in L) if (! (key in R)) print key"="L[key]"/<"
for (key in R) if (! (key in L)) print " />/"key"="R[key]
}
' | column -s / -t
結果:
emcas_fin_exp=887 | emcas_fin_exp=1134 emcas_fin_bi=324 | emcas_fin_bi=333 emcas_fin_drr=3294 | emcas_fin_drr=5528 emcas_gbo_gs=3077 | emcas_gbo_gs=3897 > emcas_fin_revpro=0
注:Debian GNU / Linux 9でテストされています。