Сценарий bash для разделения файла данных на множество подфайлов в соответствии с индексным файлом с использованием dd

У меня есть большой файл данных, который содержит много совместных файлов. Он имеет отдельный индексный файл с этим именем файла, начальным и конечным байтами каждого файла в файле данных. Мне нужна помощь в создании сценария bash для разделения большого файла на 1000 подфайлов.

Файл данных: fileafilebfilec и т. д.

Индексный файл:

имя файла.png‹0>3049

папка\имя_файла2.png‹3049>6136.

Я предполагаю, что для этого нужно перебрать каждую строку индексного файла, а затем использовать dd для извлечения соответствующих байтов в файл. Возможно, неудобной частью может быть скобка структуры папок, выполненная в стиле Windows, а не в стиле Linux.

Любая помощь высоко ценится.

while read p; do

  q=${p#*<}
  startbyte=${q%>*}
  endbyte=${q#*>}
  filename=${p%<*}
  count=$(($endbyte - $startbyte))


toprint="processing $filename startbyte: $startbyte endbyte: $endbyte count: $c$
echo $toprint

done <indexfile

person Richard S    schedule 14.11.2017    source источник
comment
Пока: пока читал p; do echo $p q=${p#*‹} startbyte=${q%›*} endbyte=${q#*›} filename=${p%‹*} toprint=обработка $filename startbyte: $startbyte endbyte: $endbyte echo $toprint выполнено ‹indexfile   -  person Richard S    schedule 14.11.2017
comment
Поместите код в вопрос, код в комментариях ужасен!   -  person Nic3500    schedule 14.11.2017
comment
Спасибо, Nic3500, готово.   -  person Richard S    schedule 14.11.2017


Ответы (1)


Сработало :-) К вашему сведению:

while read p; do

#sort out variables
  q=${p#*<}
  startbyte=${q%>*}
  endbyte=${q#*>}
  filename=${p%<*}
  count=$(($endbyte - $startbyte))


#let it know we're working
toprint="processing $filename startbyte: $startbyte endbyte: $endbyte count: $c$
echo $toprint

if [[ $filename == *"/"* ]]; then
  echo "have found /"


directory=${filename%/*}


#if no directory exists, create it
if [ ! -d "$directory" ]; then
  # Control will enter here if $directory doesn't exist.
echo "directory not found - creating one"
mkdir ~/etg/$directory
fi

fi

dd skip=$startbyte count=$count if=~/etg/largefile of=~/etg/$filename bs=1

done <indexfile
person Richard S    schedule 14.11.2017