Как сравнить несколько файлов без расширения в Bash

frame.setContentPane(newContents());
frame.revalidate(); // frame.pack() if you want to resize.

Помните, что Java использует передачу «копировать ссылку по значению». Таким образом, изменение переменной не изменит копии ссылки, переданной другим методам.

Также обратите внимание, что JFrame очень сбивает с толку имя юзабилити. Добавление компонента или настройка макета (обычно) выполняет операцию на панели содержимого. Как ни странно, получение макета действительно дает вам менеджер компоновки фрейма.

0
задан Arseni 7 March 2019 в 09:05
поделиться

2 ответа

Позвольте мне предположить:

  • У нас есть 8 (предположительно двоичных) файлов, скажем: dir1/out.txt, dir2/out.txt, .. dir8/out.txt.
  • Мы хотим сравнить среди этих файлов и определить, какие файлы идентичны, а какие нет.

Тогда как насчет шагов:

  1. Для генерации хеш-значений файлов, например, с. sha256sum. [Тысяча сто двадцать одна]
  2. Сравнить значения хеш-функции и разделить на группы на основе значений хеш-функции.

Я создал 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

, где во втором поле отображается идентификатор группы , чтобы указать, какие файлы идентичны. [ 1131]

Обратите внимание, что идентификатор группы не представляет содержимое каждого файла как: 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

Я надеюсь, что это будет соответствовать требованиям ОП.

0
ответ дан tshiono 7 March 2019 в 09:05
поделиться

Если вы ищете записи, которые являются уникальными в вашем списке файлов

cat $path/$files|uniq -u>/tmp/output.txt
grep -f /tmp/output.txt $path/$files
0
ответ дан wuseman 7 March 2019 в 09:05
поделиться