5

Это получило добрую половину моего дня, и я уверен, что такое решение должно существовать (если нет, то я его программирую), но, увы, вот в чем вопрос.

У меня есть два файла, hpc.sorted.modules.txt и bduc.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

не должно существовать Скорее, они должны быть в отдельных строках с пустой строкой в левом или правом столбце.

2 ответа2

3

Предполагая, что ширина экрана (опция -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'
1
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

Отрегулируйте формат, чтобы удовлетворить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .