need shell script to read particular records from a file

i am reading an i/p file input.txt as below and want to read all filenames as in highlighted in bold below and put them in a different file output.txt. can someone help me with a shell script to do this? thanks in advance

regards
brad

input.txt
---------
START
TYPE:OPT
INIT_SEQ:01
FINAL_SEQ:01
DATETIME:20090424174603 FILENAME:TESTDAY.0428.20090424174530.01.OP FILE_SIZE:462 NUMBER_DOCUMENTS:1
DATETIME:20090424174604 FILENAME:TESTDAY.0428.20090424174540.01.OP FILE_SIZE:462 NUMBER_DOCUMENTS:1
DATETIME:20090424174603 FILENAME:TESTMON.0428.20090424174530.01.OP FILE_SIZE:786 NUMBER_DOCUMENTS:1
DATETIME:20090424174604 FILENAME:TESTMON.0428.20090424174540.01.OP FILE_SIZE:786 NUMBER_DOCUMENTS:1
TOTAL_FILES:4
TOTAL_DOCUMENTS:2
TOTAL_ACCOUNTS:1

output.txt
----------
TESTDAY.0428.20090424174540.01.OP
TESTDAY.0428.20090424174540.01.OP
TESTMON.0428.20090424174530.01.OP
TESTMON.0428.20090424174540.01.OP

if you have Python

#!/usr/bin/env python
for line in open("file"):
    if line.startswith("DATETIME"):
        print line.split(":")[2].split()[0]

output

# ./test.py
TESTDAY.0428.20090424174530.01.OP
TESTDAY.0428.20090424174540.01.OP
TESTMON.0428.20090424174530.01.OP
TESTMON.0428.20090424174540.01.OP

awk

awk -F"[: ]" '/DATETIME/{print $4}' file

Unfortunately i dont have python and I need only shell script to perform this task. any help shall be greatly appreciated.

awk -F'[:| ]' '$4{print $4}' input.txt > new.file

Or

sed -n '/^DATETIME/{s/^DATETIME:.*FILENAME:\(.*\) FILE_SIZE.*/\1/g;p}' file

-Devaraj Takhellambam

thanks guys. all of the scripts works awesome.

thanks again.

And then some more:

$
$ perl -ne 'split/[: ]/; /^DATETIME:/ && print $_[3],"\n"' input.txt
TESTDAY.0428.20090424174530.01.OP
TESTDAY.0428.20090424174540.01.OP
TESTMON.0428.20090424174530.01.OP
TESTMON.0428.20090424174540.01.OP
$
$
$ grep ^DATETIME: input.txt | cut -d: -f3 | cut -d' ' -f1
TESTDAY.0428.20090424174530.01.OP
TESTDAY.0428.20090424174540.01.OP
TESTMON.0428.20090424174530.01.OP
TESTMON.0428.20090424174540.01.OP
$

tyler_durden

 
Or


Code:
sed -n '/^DATETIME/{s/^DATETIME:.*FILENAME:\(.*\) FILE_SIZE.*/\1/g;p}' file

-Devaraj Takhellambam 

The above is not working ..Throwing errror

 
sed: Function /^DATETIME/{s/^DATETIME:.*FILENAME:\(.*\) FILE_SIZE.*/\1/g;p} cannot be parsed.

of course after a bit change in the code, it will work :

 
sed -n 's/^DATETIME:.*FILENAME:\(.*\) FILE_SIZE.*/\1/p' rem.txt

perl:

while(<DATA>){
	print $1,"\n" if /FILENAME:([^ ]+)/;
}
__DATA__
START
TYPE:OPT
INIT_SEQ:01
FINAL_SEQ:01
DATETIME:20090424174603 FILENAME:TESTDAY.0428.20090424174530.01.OP FILE_SIZE:462 NUMBER_DOCUMENTS:1
DATETIME:20090424174604 FILENAME:TESTDAY.0428.20090424174540.01.OP FILE_SIZE:462 NUMBER_DOCUMENTS:1
DATETIME:20090424174603 FILENAME:TESTMON.0428.20090424174530.01.OP FILE_SIZE:786 NUMBER_DOCUMENTS:1
DATETIME:20090424174604 FILENAME:TESTMON.0428.20090424174540.01.OP FILE_SIZE:786 NUMBER_DOCUMENTS:1
TOTAL_FILES:4
TOTAL_DOCUMENTS:2
TOTAL_ACCOUNTS:1