Conditional splitting in more file

Dear All,
I was wondering in how split one file in multiple file in a conditional way.

Briefly, I have a file like this:

>Id1
textA
>Id2
textB

and my outputs file (2 in this case) shoul be:

Id1

>Id1
textA

Id2

>Id2
textB

hope you may help me.

Best

G

Hello giuliangiuseppe,

Could you please try following and let me know if this helps.

awk '/^>/{++i}{print >> "file" i}'  Input_file

Output will be as follows.

cat file1
>Id1
textA

cat file2
>Id2
textB

Thanks,
R. Singh

It works prefectly.
The only things is that should be nice that file name is the first line of each file (without

>

)

cat Id1
>Id1
textA

cat Id2
>id2
textB

Best

Giuliano

Try like

awk '/^>/{FN=$0; sub (">", "", FN)}{print > FN}'  file
Id1:
>Id1
textA
Id2:
>Id2
textB

Hello Giuliano,

Could you please try following then, it may help you in same.

awk '/^>/{sub(/>/,X,$0);i=$0} {print >> i}' Input_file

Output will be as follows.

cat Id1
Id1
textA
  
cat Id2
Id2
textB
 

Thanks,
R. Singh

If your input file is to be split into several files, you may have to close files when you're done writing to them. Even if you just have a few file to be written, it is a good idea to close files when you're done with them...

If you run into problems with the other suggestions you've been given, you could try:

awk '/^>/{close(f);f=substr($0,2)}{print > f}' file

As always, if you want to try any of these awk script on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk .