Vergleichen Sie zwei Dateien nebeneinander, neue Zeilen in der linken Spalte für keine Übereinstimmung

8133
Adam

Dies hat die gute Hälfte meines Tages gebracht und ich bin sicher, dass es eine solche Lösung geben muss (wenn nicht, dann programmiere ich eine), aber leider ist hier die Frage.

Ich habe zwei Dateien hpc.sorted.modules.txtund bduc.sorted.modules.txt. Was ich erreichen möchte, ist ein Vergleich der beiden Dateien nebeneinander, wobei alle Änderungen, die sich in keiner der Dateien befinden, in der leeren Spalte stehen. Ich möchte nicht diffan die gleiche Zeile anhängen > <oder |wenn sie nicht übereinstimmen.

Beispielausgabe: http://pastebin.com/raw.php?i=sr20gyWz using

diff -y -W 100 hpc.sorted.new.list bduc.sorted.new.list 

Um den Punkt weiter zu betonen, wenn Sie sich das Beispiel ansehen, die Zeile:

bfast/0.7.0a | bedtools/2.6.1 

sollte nicht existieren Sie sollten sich vielmehr in separaten Zeilen mit einer leeren Zeile in der linken oder rechten Spalte befinden.

5
ist vimdiff eine option? gniourf_gniourf vor 11 Jahren 0
@gniourf_gniourf Ja `vimdiff` oder` sdiff` oder `comm` oder ein anderes Programm / Skript ist eine Lösung. Das Ausführen von `vimdiff hpc.sorted.new.list bduc.sorted.new.list` gibt mir jedoch immer noch das oben genannte Problem (die Zeile` bfast / 0.7.0a` ist mein ursprünglicher Beitrag). Adam vor 11 Jahren 0
Ich sehe das `comm`-Tag in der Frage. gibt Ihnen dieses Programm nicht das, was Sie wollen? chepner vor 11 Jahren 2

2 Antworten auf die Frage

3

Assuming that screen width (-W option) is even, try the following

diff --expand-tabs -W 100 -y hpc.sorted.new.list bduc.sorted.new.list | awk -v W=100 '(substr($0,W/2,1)=="|") 1' 
1
glenn jackman
format="%-50s | %-50s\n" comm --output-delimiter=: hpc.sorted.modules.txt bduc.sorted.modules.txt | while IFS= read -r line; do case $line in ::*) line=$; printf "$format" "$line" "$line" ;; :*) line=$; printf "$format" "" "$line" ;; *) printf "$format" "$line" "" ;; esac done 

Adjust format to suit.