bradc
May 19, 2009, 7:59pm
1
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
bradc
May 19, 2009, 9:12pm
3
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
bradc
May 20, 2009, 12:48am
6
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