Parsing a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing a file
# 1  
Old 03-11-2008
Parsing a file

Hi,
Please help in parsing the following file and write separate files by parsing the file for the new file's content.


Main File:
------------

BEGIN
FileName: FirstFile.txt
Content of the File Start
AAAAAAAA
BBBBBBB
Content of the File End
END
BEGIN
FileName: SecondFile.txt
Content of the File Start
CCCCCC
DDDDDD
Content of the File End
END
BEGIN
FileName: ThirdFile.txt
Content of the File Start
EEEEEEE
FFFFFFFF
Content of the File End
END
BEGIN
FileName: FourthFile.txt
Content of the File Start
YYYYYYYY
ZZZZZZZZ
Content of the File End
END

OUTPUT:
Four files with the file names FirstFile.txt,SecondFile.txt,ThirdFile.txt and FourthFile.txt
and content of the files will be between BEGIN and END except FileName
eg:
FirstFile.txt:
##################
Content of the File Start
AAAAAAAA
BBBBBBB
Content of the File End
##################


Thanks in Advance
# 2  
Old 03-11-2008
Code:
awk '/END/ {flag = 0}
     flag  {print > of}
     /FileName/ {flag = 1;of = $2}' file

# 3  
Old 03-12-2008
Hope this Should Work!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#!/usr/bin/ksh

i=1
j=1
cat samp | while read line
do
val="END"
value="BEGIN"
if [ $j -le 7 ]
then
if [[ $line != $val && $line != $value ]]
then
echo $line
echo $line >> File$i.txt
j=`expr $j + 1`
fi
if [ $j -eq 7 ]
then
j=0
i=`expr $i + 1`
fi
fi
done

Regards,
Anand
# 4  
Old 03-14-2008
Thanks for Shamrock & Anand for the quick response and sorry for the late acknowledgement
# 5  
Old 03-24-2008
Quick Question

Hi Shamrock & Anand,
I am trying to parse the similar (below mentioned sample.txt) file using the following script. But I am having the following issue:
1. Whitespaces of the file are not maintained.
2. Text (****************************************) is not getting printed.Its getting translated to the script file name.


Script:
#!/usr/bin/sh
i=1
cat sample.txt | while read line
do
var1="END"
var2="BEGIN"
toPrint=`echo $line | cut -c1-7`
toPrintText=`echo $line | cut -c8-`
elif [[ $toPrint == 'TOPRINT' ]]
then
echo toPrintText
elif [[ $line != $var1 && $line != $var2 ]]
then
echo $line >> File$i.txt
elif [[ $line == $var1 ]]
then
i=`expr $i + 1`
fi
done




=========
sample.txt
=========
BEGIN
First File Content Starts here
****************************************

Something or the other here
TOPRINT=This is the text to print on the consolee....
This is the end of the File content
END
BEGIN
Second File Content Starts here
****************************************

Something or the other here
TOPRINT=This is the text to print on the consolee....
This is the end of the File content
END
BEGIN
Third File Content Starts here
****************************************

Something or the other here
TOPRINT=This is the text to print on the consolee....
This is the end of the File content
END



Appreciate your response!

Thanks
# 6  
Old 03-24-2008
Quote:
Originally Posted by aol12123
1. Whitespaces of the file are not maintained.
2. Text (****************************************) is not getting printed.Its getting translated to the script file name.
Both of these are symptoms of inadequate quoting. The asterisk is a wildcard which gets expanded to a list of file names unless you quote it; perhaps it would be wise to use a different separator.

Quote:
#!/usr/bin/sh
i=1
cat sample.txt | while read line
do
(This, of course, is a Useless Use of Cat. The recommended idiom is
Code:
while read line
do
   : ...
done <sample.txt

... But don't worry too much about this stylistic detail.)

Quote:
var1="END"
var2="BEGIN"
toPrint=`echo $line | cut -c1-7`
toPrintText=`echo $line | cut -c8-`
elif [[ $toPrint == 'TOPRINT' ]]
then
echo toPrintText
See how far you can get just by judiciously quoting everything. The use of echo inside backticks is probably going to ruin some of your whitespace anyway -- quite frankly, I would not use a shell script for this. But try modifications like

Code:
var1="END"
var2="BEGIN"
toPrint="`echo "$line" | cut -c1-7`" 
toPrintText="`echo "$line" | cut -c8-`" 
elif [[ "$toPrint" == 'TOPRINT' ]]
	then
	echo "$toPrintText"

(I also added the missing dollar sign on the last line.)

Your "elif" seems to be missing the initial "if" but that's trivial, of course.

Last edited by era; 03-24-2008 at 04:28 AM..
# 7  
Old 03-24-2008
Code:
awk 'BEGIN{n=1;FS=":"}
$0 ~ /^BEGIN/ {flag=1;getline;findex=$2;getline}
$0 ~ /^END/ {flag=0;n=n+1}
{
if (flag==1)
file[findex]=sprintf("%s\n%s",file[findex],$0)
}
END{
for (i in file)
{
print i" ----> "file[i]
print "-----------------"
}
}' filename

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

File Parsing

Hi Gurus, i have files like this and i want to rename it. server1_0_Log0000597500 server1_0_Log0000597501 server1_0_Log0000597502 server1_0_Log0000597503 server1_0_Log0000597504 server1_0_Log0000597505 server1_0_Log0000597506 server1_0_Log0000597507 server1_0_Log0000597508... (7 Replies)
Discussion started by: fedora132010
7 Replies

2. Shell Programming and Scripting

parsing data from a big file using keys from another smaller file

Hi, I have 2 files format of file 1 is: a1 b2 a2 c2 d1 f3 format of file 2 is (tab delimited): a1 1.2 0.5 0.06 0.7 0.9 1 0.023 a3 0.91 0.007 0.12 0.34 0.45 1 0.7 a2 1.05 2.3 0.25 1 0.9 0.3 0.091 b1 1 5.4 0.3 9.2 0.3 0.2 0.1 b2 3 5 7 0.9 1 9 0 1 b3 0.001 1 2.3 4.6 8.9 10 0 1 0... (10 Replies)
Discussion started by: Lucky Ali
10 Replies

3. Shell Programming and Scripting

Parsing of file for Report Generation (String parsing and splitting)

Hey guys, I have this file generated by me... i want to create some HTML output from it. The problem is that i am really confused about how do I go about reading the file. The file is in the following format: TID1 Name1 ATime=xx AResult=yyy AExpected=yyy BTime=xx BResult=yyy... (8 Replies)
Discussion started by: umar.shaikh
8 Replies

4. Shell Programming and Scripting

Parsing file, yaml file? Extracting specific sections

Here is a data file, which I believe is in YAML. I am trying to retrieve just the 'addon_domains" section, which doesnt seem to be as easy as I had originally thought. Any help on this would be greatly appreciated!! I have been trying to do this in awk and mostly bash scripting instead of perl... (3 Replies)
Discussion started by: Rhije
3 Replies

5. UNIX for Dummies Questions & Answers

Script for parsing details in a log file to a seperate file

Hi Experts, Im a new bee for scripting, I would ned to do the following via linux shell scripting, I have an application which throws a log file, on each action of a particular work with the application, as sson as the action is done, the log file would vanish or stops updating there, the... (2 Replies)
Discussion started by: pingnagan
2 Replies

6. Shell Programming and Scripting

File Parsing Help

Hello, I have a file which contains groups of fields. These groups are separated by a blank line, to form a logical record. Each line consists of a field-value pair. If want to find all records where field 'd' has a value of '4' and if it does, I want the value of field 'a' (from the... (4 Replies)
Discussion started by: brawnr
4 Replies

7. Shell Programming and Scripting

Perl parsing compared to Ksh parsing

#! /usr/local/bin/perl -w $ip = "$ARGV"; $rw = "$ARGV"; $snmpg = "/usr/local/bin/snmpbulkget -v2c -Cn1 -Cn2 -Os -c $rw"; $snmpw = "/usr/local/bin/snmpwalk -Os -c $rw"; $syst=`$snmpg $ip system sysName sysObjectID`; sysDescr.0 = STRING: Cisco Internetwork Operating System Software... (1 Reply)
Discussion started by: popeye
1 Replies

8. Shell Programming and Scripting

need help in Parsing a CSV file and generate a new output file

Hi Scripting Gurus, I am trying to parse a csv file and generate a new output file. The input file will be a variable length in turns of rows and columns. output file will have 8 columns. we have three columns from the header for each set. just to give little bit more clarification each row... (15 Replies)
Discussion started by: vkr
15 Replies

9. Shell Programming and Scripting

Finding & Moving Oldest File by Parsing/Sorting Date Info in File Names

I'm trying to write a script that will look in an /exports folder for the oldest export file and move it to a /staging folder. "Oldest" in this case is actually determined by date information embedded in the file names themselves. Also, the script should only move a file from /exports to... (6 Replies)
Discussion started by: nikosey
6 Replies

10. Shell Programming and Scripting

Help me with parsing this file

Hi, I need a shell script that would parse this file /usr/share/i18n/locales/aa_DJ:title "Afar language locale for Djibouti (Cadu/Laaqo Dialects)." /usr/share/i18n/locales/aa_ER:title "Afar language locale for Eritrea (Cadu/Laaqo Dialects)." /usr/share/i18n/locales/aa_ER@saaho:title... (2 Replies)
Discussion started by: eamani_sun
2 Replies
Login or Register to Ask a Question