web-dev-qa-db-ja.com

2つのファイルを並べて差分し、左側の列に新しい行が一致しない

これは私の一日の半分を過ごしており、そのような解決策が存在する必要があると確信しています(そうでない場合は、プログラミングしています)が、残念ながら、ここに質問があります。

hpc.sorted.modules.txtbduc.sorted.modules.txtの2つのファイルがあります。私が達成したいのは、どちらかのファイルでnotである変更が空の列にある、2つのファイルを並べて比較することです。 diff><または|と同じ行に一致しない場合、それらを追加したくありません。

出力例: http://Pastebin.com/raw.php?i=sr20gyWz using

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

この点をさらに強調するために、例を見ると、次の行があります。

bfast/0.7.0a                      | bedtools/2.6.1

存在すべきではありません。むしろ、それらは、左または右の列のいずれかに空の行がある別々の行にある必要があります。

5
Adam

画面幅(-Wオプション)が偶数であると仮定して、次のことを試してください

diff --expand-tabs -W 100 -y  hpc.sorted.new.list bduc.sorted.new.list |
awk -v W=100 '(substr($0,W/2,1)=="|")
                  {left=substr($0,1,(W/2)-1);print left "<";
                   right=substr($0,(W/2)+1);printf "%" ((W/2)-1) "s>%s\n"," ", right;
                   next;}1'
3
Misha
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=${line#::}; printf "$format" "$line" "$line" ;;
        :*)  line=${line#:};  printf "$format" "" "$line" ;;
        *)                    printf "$format" "$line" "" ;;     
    esac
done

必要に応じてフォーマットを調整します。

1
glenn jackman