Using awk to create files based on a variable name

Hey all,
I am parsing a file which have records containing one of a number of files names:
".psd", ".cr2", ".crw" , ".cr", ".xi", ".jpg", ".xif" etc
Somewhere on each line there is a value "Namex.psd" "Namex.crw" etc. The position of this name is highly variable
I need to output all the ".psd" records into a single file called PSD. Each record in the file would be named "Namex".
Ultimately I would have 8 or 9 file names containing 15 thousand records.

The question is how do I output data into records based on the contents of the data?

Your help would be greatly appreciated.

---------- Post updated at 11:30 AM ---------- Previous update was at 11:23 AM ----------

One clarification.
I meant each value in the output file would be Namex.
example
an input record containing "picture_001.psd would be output to a filename called "PSD" and it's value would be "picture_001"

This would parse all occurences of namex.psd in all the files in a directory (*) and put it in the file PSD:

grep -o '\b[^[:space:]]\+\.psd' * >PSD 

However they would all have the extension .psd. To cut that off we could do this:

grep -o '\b[^[:space:]]\+\.psd' * |sed 's/\.psd//' >PSD 

ah ha. so I could use a "for" statement and substitute the file type with $i.
eg:
for i in psd cr cr2 crw
do

Its a bit wordy but try this: -

nawk '
( match($0, /[ ]+.*(.psd|.cr2|.crw|.cr|.xi|.jpg|.xif) /) ){
        str = substr( $0, RSTART, RLENGTH )
        sub( / $/, "", str)
        sub( /^ /, "", str)
        dot = index(str, ".")
        ext = substr( str, dot + 1, 3)
        tgt = substr( str, 1, dot -1)
        print tgt >> toupper(ext)
}
' infile

If the file names have one single dot:

awk -F"." '{print $1 > $2}' file