Загрузка данных


#!/usr/bin/env bash

set -euo pipefail

if [[ $# -ne 2 ]]; then
    echo "Usage: $0 <file_a> <file_b>" >&2
    exit 1
fi

FILE_A="$1"
FILE_B="$2"

[[ -f "$FILE_A" ]] || {
    echo "Error: file not found: $FILE_A" >&2
    exit 1
}

[[ -f "$FILE_B" ]] || {
    echo "Error: file not found: $FILE_B" >&2
    exit 1
}

TEMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TEMP_DIR"' EXIT

SORTED_A="$TEMP_DIR/a.sorted"
SORTED_B="$TEMP_DIR/b.sorted"
ONLY_A="$TEMP_DIR/only-a"
ONLY_B="$TEMP_DIR/only-b"

normalize_file() {
    local input_file="$1"
    local output_file="$2"

    sed '
        s/^[[:space:]]*//
        s/[[:space:]]*$//
        /^[[:space:]]*$/d
    ' "$input_file" |
        LC_ALL=C sort -u > "$output_file"
}

normalize_file "$FILE_A" "$SORTED_A"
normalize_file "$FILE_B" "$SORTED_B"

LC_ALL=C comm -23 "$SORTED_A" "$SORTED_B" > "$ONLY_A"
LC_ALL=C comm -13 "$SORTED_A" "$SORTED_B" > "$ONLY_B"

echo "Only in A ($FILE_A):"
if [[ -s "$ONLY_A" ]]; then
    cat "$ONLY_A"
else
    echo "(none)"
fi

echo
echo "Only in B ($FILE_B):"
if [[ -s "$ONLY_B" ]]; then
    cat "$ONLY_B"
else
    echo "(none)"
fi

echo
echo "Summary:"
echo "Only in A: $(wc -l < "$ONLY_A")"
echo "Only in B: $(wc -l < "$ONLY_B")"

if [[ ! -s "$ONLY_A" && ! -s "$ONLY_B" ]]; then
    echo "The files contain the same set of OIDs."
fi