2016-08-29 23 views

答えて

1

たとえば、 の場合、文字をファイルごとに比較することができます。違いがある場合は、2番目のファイルの文字を印刷します。これを行う方法は次のとおりです。

paste <(fold -w1 file1) <(fold -w1 file2) | \ 
while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done 

この例では、これはA05と表示されます。

2
diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) | 
sed 's/.*\(.\)$/\1/' | paste -s -d '' - 

これは、1つの文字広いですし、その後diffと比較する文字列の中に各ファイルをオンにするfoldとプロセス置換を使用しています。

-yオプションは、隣り合った行を印刷し、--suppress-common-linesは、両方のファイル間で同じ行をスキップします。これまでの出力は次のようになります。

$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) 
a         | A 
5         | 0 
1         | 5 

各行の最後の文字にのみ関心があります。 (シリアル)-sオプションと区切り文字(-d '')として空の文字列でpaste

$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) | 
> sed 's/.*\(.\)$/\1/' 
A 
0 
5 

は1行にこれらを取得するために、我々パイプ:我々は残りの部分を破棄するsedを使用しています。ダッシュで標準から読み取るpasteを伝え

$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) | 
> sed 's/.*\(.\)$/\1/' | paste -s -d '' - 
A05 

代わり、あなたはあなたの処分でGNUのdiffutilsを持っている場合、cmpです。

$ cmp -lb file1 file2 | awk '{print $5}' | tr -d '\n' 
A05 

cmpファイルはバイト単位で比較します。 -lオプション( "詳細")は、最初のものだけでなく、すべての相違点を表示します。 -bオプションは、それが異なるバイトのASCIIの解釈を追加します

$ cmp -lb file1 file2 
2 141 a 101 A 
18 65 5  60 0 
34 61 1  65 5 

awkコマンドは、5列目には、この出力を減少させ、そしてtrは、改行を削除します。

関連する問題