Позвольте мне предположить:
- У нас есть 8 (предположительно двоичных) файлов, скажем:
dir1/out.txt
, dir2/out.txt
, .. dir8/out.txt
. - Мы хотимСравните среди этих файлов и определите, какие файлы идентичны, а какие нет.
Тогда как насчет шагов:
- Для генерации хеш-значений файлов, например,
sha256sum
. - Чтобы сравнить значения хеш-функции и разделить на группы на основе значений хеш-функции.
Я создал 8 тестовых файлов, из которых dir1 / out.txt, dir2 / out.txt и dir4 / out.txt являются идентичными, dir3 / out.txt и dir7 / out.txt идентичны, а другие отличаются.
Тогда значения хеш-функции будут выглядеть следующим образом:
sha256sum dir*/out.txt
298497ad818c3d927498537ed5ab4f9ae663747b6d00ec9a5d0bd9e30a6b714b dir1/out.txt
298497ad818c3d927498537ed5ab4f9ae663747b6d00ec9a5d0bd9e30a6b714b dir2/out.txt
e962879ef251f2117460cf0d5ce714e36a9ab79f2548c48e2121b4e573cf179b dir3/out.txt
298497ad818c3d927498537ed5ab4f9ae663747b6d00ec9a5d0bd9e30a6b714b dir4/out.txt
f45151f5253c62de69c95935f083b5649876fdb661412d4f32065a7b018bf68b dir5/out.txt
bdc26931acfb734b142a8d675f205becf27560dc461f501822de13274fe6fc8a dir6/out.txt
e962879ef251f2117460cf0d5ce714e36a9ab79f2548c48e2121b4e573cf179b dir7/out.txt
11a77c3d96c06974b53d7f40a577e6813739eb5c811b2a86f59038ea90add772 dir8/out.txt
Чтобы подвести итог, позвольте мне заменить хэш-значения на идентификатор группы , имеющие одинаковые номера для тех же файлов в порядке появления.
Вот сценарий:
sha256sum dir*/out.txt | awk '{if (!gid[$1]) gid[$1] = ++n; print $2 " " gid[$1]}'
Вывод:
dir1/out.txt 1
dir2/out.txt 1
dir3/out.txt 2
dir4/out.txt 1
dir5/out.txt 3
dir6/out.txt 4
dir7/out.txt 2
dir8/out.txt 5
, где во втором поле отображается идентификатор группы , чтобы указать, какие файлы идентичны.
Обратите внимание, что идентификатор группы не представляет содержимое каждого файла как: if 2 of the out.txt files are all '1' = F , and if all '0' = 0
, потому что я понятия не имею, как выглядят файлы.Если OP может предоставить файлы примеров, я мог бы помочь.
Кстати, я все еще сомневаюсь, являются ли файлы двоичными в обычном смысле, потому что OP упоминает, что «это просто файл, который содержит0 или 1 в его значении, когда я его открываю ".Мне кажется, файлы состоят из «0» и «1».Мой скрипт выше должен работать как для двоичных, так и для текстовых файлов.
[Обновление]
Согласно информации ОП, вот решение для конкретного случая:
#!/bin/bash
for f in dir*/out.txt; do
if [[ $(uniq "$f" | wc -l) = 1 ]]; then
echo -n "$(head -1 "$f" | tr 1 F)"
else
echo -n "-"
fi
done
echo
Он переваривает содержимое каждого файла на: 0
для всех 0, F
для всех 1 или -
для смешанного случая (возможная ошибка).
Например,, если dir {1..4} /out.txt - все 0, dir5 / out.txt - смесь, а dir {6..8} /out.txt - все 1, то результат будет выглядеть следующим образом:
0000-FFF
Надеюсь, он будет соответствовать требованиям ОП.