Как добавить случайные данные в определенные места в файле

Вопрос или проблема

На моем компьютере работает ядро Linux и bash, я проведу технический эксперимент.

У меня есть файл, file.dat, размер = 1.048.576 байт.

Я добавлю в определенные места в file.dat некоторый нерегулярный (от 1 до 8 байт) случайный данные из /dev/random.

Как это сделать и как удалить случайные данные позже?

Под определенными местами я имею в виду ряд Фибоначчи, я нашел некоторые скрипты для генерации этих чисел:

#!/bin/bash
clear
echo "Программа для нахождения ряда Фибоначчи"
  echo "Сколько чисел должно быть сгенерировано?"
  read n
  x=0
  y=1
  i=2
  echo "Ряд Фибоначчи до $n элементов :"
  echo "$x"
  echo "$y"
  while [ $i -lt $n ]
  do
      i=`expr $i + 1 `
      z=`expr $x + $y `
      echo "$z"
      x=$y
      y=$z
  done

Другой:

# Читаем значение n от пользователя
echo -n "Введите количество элементов: "
read n

# Инициализируем переменные
a=0
b=1

# Печатаем первые два элемента
echo -n "$a $b "

# Генерируем ряд Фибоначчи
for (( i=2; i<$n; i++ ))
do
    c=$((a + b))
    echo -n "$c "
    a=$b
    b=$c
done

echo

Ряд Фибоначчи указывает, где иногда добавлять от 1 до 8 байт с случайными данными.

Я знаю, что это увеличивает размер файла file.dat до более чем 1.048.576 байт, но именно этого я и ищу.

Есть идеи, как это сделать?

Ответ или решение

Чтобы добавить случайные данные в определенные места в файле file.dat, который имеет размер 1.048.576 байт, и сделать это с использованием чисел Фибоначчи для определения мест вставки, вы можете использовать следующий подход. Мы сначала сгенерируем последовательность чисел Фибоначчи, а затем будем использовать их для вставки случайных данных из /dev/random. Также я предоставлю инструкцию по удалению этих данных.

Шаг 1: Генерация чисел Фибоначчи

Вы можете использовать следующий скрипт для генерации первых n чисел Фибоначчи:

#!/bin/bash
echo -n "Введите количество членов: "
read n

a=0
b=1
indices=()

# Записываем индексы Фибоначчи в массив
for (( i=0; i<n; i++ )); do
    indices+=("$a")
    c=$((a + b))
    a=$b
    b=$c
done

echo "Индексы для вставки: ${indices[@]}"

Шаг 2: Добавление случайных данных в файл

После того как вы получили индексы, вы можете использовать следующий скрипт для вставки случайных данных.

#!/bin/bash

# Устанавливаем размер файла и количество членов Фибоначчи
file="file.dat"
size_file=$(stat -c%s "$file")
n=20 # Настройте количество членов Фибоначчи, если необходимо

# Генерируем индексы Фибоначчи
a=0
b=1
indices=()
for (( i=0; i<n; i++ )); do
    indices+=("$a")
    c=$((a + b))
    a=$b
    b=$c
done

# Добавляем случайные данные
for index in "${indices[@]}"; do
    if ((index < size_file)); then
        rand_size=$((RANDOM % 8 + 1)) # Генерируем случайный размер от 1 до 8
        dd if=/dev/random bs=1 count=$rand_size | dd of="$file" bs=1 seek=$index conv=notrunc
    fi
done

Шаг 3: Удаление случайных данных

Удаление случайных данных, вставленных в файл, может быть сложно, поскольку вам необходимо установить заранее, где именно были вставлены данные. Один из подходов заключается в использовании резервного файла для хранения оригинальных данных. Ниже приведен простой способ сохранить резервную копию и восстановить файл:

# Создаем резервную копию файла перед внесением изменений
cp file.dat file_backup.dat

# После вставки данных
# Чтобы восстановить оригинальный файл
mv file_backup.dat file.dat

Заключение

Теперь у вас есть два сценария: один для добавления случайных данных в определенные позиции в файле согласно числам Фибоначчи, и другой для восстановления оригинала после внесения изменений. Не забывайте всегда делать резервные копии важных файлов перед их изменением.

Оцените материал
Добавить комментарий

Капча загружается...