У меня есть два файла, которые содержат n строк со строкой в каждой строке.Я хочу распечатать разницу в символах между этими списками.Вы можете представить операцию как своего рода «вычитание» букв.Вот как это должно выглядеть:
List1 List2 Result
AaBbCcDd AaCcDd Bb
AaBbCcE AaBbCc E
AaBbCcF AaCcF Bb
Это означает, что второй список отсортирован не по алфавиту, а все удаляемые подстроки отсортированы внутри каждой строки (Aa
предшествует Bb
раньшеCc
).Обратите внимание, что удаляемые элементы могут иметь длину 1 или 2 символа (Aa
или F
), всегда начинающиеся с заглавных букв, за которыми (иногда) следует строчная буква.Строки полностью состоят из перестановок нескольких «элементов», таких как Aa
, Bb
, Cc
, Dd
, E
, F
, Gg
, ... и т. Д.
Этот вопрос был дан в очень похожей форме: Сценарий Bash Найти разницу между двумя строками , но только для двух строк, введенных вручную, тогда как мне нужно выполнять операцию много сотен раз.Я пытаюсь реализовать файлы в качестве источника этой команды, а также правильно разделять символы.Вот моя адаптация:
split_chars() { sed $'s/./&\\\n/g' <<< "$1"; }
comm -23 <(split_chars AaBbCcDd) <(split_chars AaCcDd)
, которая дает в качестве вывода
B
b
, так что все еще не совсем то, что я хочу, даже в этом единственном случае.Я предполагаю, что команда split_chars
является ключевой здесь, но я не смог применить ее к моим файлам в любом случае.Помещение имен файлов в скобки не работает, очевидно.Для справки, простой
commm -23 List1 List2
просто приводит к
AaBbCcDd
AaBbCcEe
AaBbCcF
comm: file 2 is not in sorted order