awk : split file and rename and save in path according to content

Hello,

I'm using Windows 7 ; sed, awk and gnuwin32 are installed.
I have a big text file I need to manipulate.
In short, I will have to split it in thousands of short files, then rename and save in a folder which name is based upon filename.

Here is a snippet of my big input.txt file (this pattern is repeated 70k times) :

ctime=1041379201
version=text text
name=Bob.2111
targets=text text
title=text text
description=long text ending with[[#source_]]

As of now, I know how to split it with awk :

awk "/ctime/{x="F"++i;}{print > x;}" input.txt 

Yet I dont know how to drive awk in renaming files.
In every splitted file, there is a line (line number 3 of the splitted file) which says the name of the expected file. In showed snippet, it is : name=Bob.2111 .
I expect to have about 70k files named like Bob.[0-9]+ (no extension).

My question number one is : is awk able to do that ? is awk able to catch a value in current file according to some pattern for renaming the splitted files ? I did not find anwser yet. Most examples order awk to use a name which doesnt come from the manipulated file.

My question number two is : is awk also able to save the splitted files in a constructed path, according to content ?
I want all splitted files containing Bob.1[0-9]+ to be saved in folder 1/ ; all Bob.2[0-9]+ to be saved in folder 2/, etc., for limiting the quantity of files per folder (using first number of numerical id).

I guess I need to catch every Bob.[0-9]+ in a variable $1.
Thus I may use this variable for (1) renaming files and (2) for moving files
If Bob.2111 is $1, I would like to save file like that {substring $1,4,20}/$1 which would give 2/Bob.2111 .

As you can guess, I'm not expert :wink:
Thank you.

I'm not sure I grasped everything that you specified...
Why rename when you can save it immediately to the desired file? This requires all the directories exist:

awk '/ctime/ {T1=$0; next} /version/ {T2=$0; next} /name/ {FN=substr ($2, 5, 1) "/" $2;  print T1 > FN; print T2 > FN} {print > FN}' FS="=" file

Maybe I'm not clear, I'm sorry.

Big input file is full of text, structured like that :

ctime=1041379201
name=Bob.2112
targets=text
title=text
description=text
text=text ending with [[#source_]]
ctime=1041379201
name=Bob.2113
targets=text
title=text
description=text
text=text ending with[[#source_]]
ctime=1041379201
name=Bob.2115
targets=text
title=text
description=text
text=text ending with[[#source_]]
ctime=1041379201
name=Bob.2116
targets=text
title=text
description=text
text=text ending with [[#source_]]

I need to split this big file in short files, from [ctime to ]ctime.
Which I can do using awk.

I'm looking for a way to tell awk (or else ?) how to name these splitted files. I wish it is doable with awk during the splitting step (split and give name).
I want files to be named depending to their content : Bob.2112, Bob.2115, Bob.2116, etc.

If we imagine the big input text has this form :
a=aa
b=bb
c=cc
d=dd
a=aa2
b=bb2
c=cc2
and value wanted is after c=, might it help for building the command ?

@Rudi : I'm trying to play with your code (on Windows, sorry), with no success atm : awk: (FILENAME=input.txt FNR=2) fatal : can't redirect to `/' (Permission denied)

after you have split the files,,,in the same directory

for file in F*
do
$name=$(awk -F"=" '$1=="name"{print $2}' )
cp $file $name
done

if this works , change cp to mv

This is the result for me:

find 2
2
2/Bob.2113
2/Bob.2115
2/Bob.2112
2/Bob.2116
2/Bob.2111

Print the internal, new file name to stdout for debugging purposes.
And, why do you change the input file structure between posts?

---------- Post updated at 23:29 ---------- Previous update was at 23:04 ----------

To be able to handle maaany files, you might want to close (FN) just before you define the new one...