并排比较两个文件的差异,左列中出现新行表示不匹配

并排比较两个文件的差异,左列中出现新行表示不匹配

这已经占用了我大半天的时间,我确信这样的解决方案一定存在(如果没有,那么我正在编写一个程序),但唉,这是问题所在。

我有两个文件,hpc.sorted.modules.txtbduc.sorted.modules.txt。我想要实现的是并排比较这两个文件,其中任何更改不是两个文件中的 都在其空列中。如果它们不匹配,我不想diff将它们附加到同一行。> <|

示例输出:http://pastebin.com/raw.php?i=sr20gyWz使用

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

为了进一步强调这一点,如果你看一下这个例子,就会发现这一行:

bfast/0.7.0a                      | bedtools/2.6.1

不应该存在。相反,它们应该位于不同的行上,并且在左列或右列中有一个空行。

答案1

假设屏幕宽度(-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'

答案2

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

调整格式以适应。

相关内容