Захватить случайное количество байтов из файла с bash? - PullRequest
0 голосов
/ 24 мая 2010

У меня есть файл 256MB. Я хотел бы получить случайное количество данных из этого файла и скопировать его в другой файл.

Есть ли способ сделать это в bash или каким-либо другим способом?

Редактировать: выберите случайное число от 1 до 256, а затем скопируйте это число в МБ из одного файла в другой.

Ответы [ 3 ]

3 голосов
/ 24 мая 2010

Копирует с начала:

# (random) blocks of one byte
dd of=output_file if=input_file ibs=1 count=$((($RANDOM % 256) + 1)M

# one block of (random) bytes
dd of=output_file if=input_file ibs=$((($RANDOM % 256) + 1)M count=1

Используйте опцию skip=, чтобы начать откуда-то еще, если хотите.

(мой плохой, забыл указать размер блока.)

1 голос
/ 24 мая 2010

Если в вашей ОС есть / dev / urandom, то выбрать случайные числа очень просто:

RANDNUM=`dd if=/dev/urandom bs=1 count=1 | od -t u1 | cut -f4- -d ' ' | head -1 | sed 's/ //g'`

Если у вас есть случайное число,

dd if=input_file of=output_file bs=${RANDNUM}m count=1
1 голос
/ 24 мая 2010
cat somefile|head -c `head -c 3 /dev/random |hexdump -d|cut -f4 -d ' '|head -n1`
...