File1:
123
234
345
456
File2:
123
234
343
758
Ожидаемый результат: File3:
TRUE
TRUE
FALSE
FALSE
поэтому код должен сравнить два файла и вывести «TRUE», если он совпадает, иначе он должен вывести «FALSE» в новом файле. Может ли кто-нибудь предоставить решение для этого?
text-processing
awk
diff
Велю
источник
источник
diff
.comm
. Это позволяет легко перечислять строки, которые оба файла имеют общие или являются уникальными для одного или другого.comm
что он требует сортированного ввода. Помимо того , что пример в этом вопросе действительно отсортировали вход, вопрос никогда не утверждает , что это фактические данные, которые используются и никогда не говорит ничего о упорядочивания данных.nl
полезнаcomm
для наложения сортировки на файлы.Ответы:
Используйте
diff
команду следующим образом, вbash
любой другой оболочке, которая поддерживает<(...)
подстановки процессов, или вы можете эмулировать ее, как показано здесь :Выход будет:
--new-line-format='FALSE'$'\n
выведите,FALSE
если строки были разными, и--old-line-format=''
мы отключаем вывод, если строка отличалась для file1, который известен как старая команда file to diff (мы также можем поменять их местами, что означает, что один из них должен печататьFALSE
другой, должен быть отключен).--unchanged-line-format='TRUE'$'\n'
выведите,TRUE
если строки были одинаковыми.$'\n'
побега синтаксис С-типа используется для печати на новую строку после каждого линейного выхода.источник
Предполагая, что файлы не содержат символов табуляции:
Используется
paste
для создания двух столбцов с разделителями табуляции, с содержимым двух файлов в каждом столбце. Командаawk
сравнивает два столбца в каждой строке и печатает,TRUE
если столбцы совпадают, и печатает иначеFALSE
.источник
Предполагая, что оба файла имеют одинаковое количество строк:
Это делает числовое сравнение, если строки для сравнения являются числами и лексическими в противном случае. Например,
100
и1.0e2
будет считаться идентичным. Изменить наf2"" == $0
принудительное лексическое сравнение в любом случае.В зависимости от
awk
реализации, лексическое сравнение будет выполняться как при использованииmemcmp()
(межбайтовое сравнение), или как при использованииstrcoll()
(независимо от того, сортируются ли две строки одинаково в порядке сортировки локали). Это может иметь значение в некоторых локалях, где порядок не определен для некоторых символов, а не для всех вводимых десятичных цифр, как в вашем примере.источник
Python 3
Выход:
Если вам нужно
TRUE
иFALSE
заглавными буквами, замените строку печати одним из следующих:источник
import itertools
сначала выполните , а затем используйтеitertools.izip
вместоzip
. В противном случае он будет считывать оба файла в память, возможно, используя слишком много памяти.В
bash
, чтение из каждого файла вwhile
цикле, сравнение строк чтения и печатиTRUE
илиFALSE
соответственно:Два вызова для
read
чтения из файлового дескриптора 3 и 4 соответственно. Файлы перенаправляются на них с двумя входными перенаправлениями в цикл.источник
выход
источник