Text Splitter


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Text Splitter
# 1  
Old 08-17-2012
Text Splitter

Hi,

I need to split files based on text:
Code:
BEGIN DSJOB
   Identifier "LA"
   DateModified "2011-10-28"
   TimeModified "11.10.02"
   BEGIN DSRECORD
      Identifier "ROOT"
      BEGIN DSSUBRECORD
         Owner "APT"
         Name "RecordJobPerformanceData"
         Value "0"
      END DSSUBRECORD
   END DSRECORD
END DSJOB
........
........
BEGIN DSJOB
   Identifier "NA"
   DateModified "2011-10-28"
   TimeModified "11.10.02"
   BEGIN DSRECORD
      Identifier "ROOT"
      BEGIN DSSUBRECORD
         Owner "APT"
         Name "RecordJobPerformanceData"
         Value "0"
      END DSSUBRECORD
   END DSRECORD
END DSJOB
........
........
........
..........

My output should be:
LA.txt
Code:
BEGIN DSJOB
   Identifier "LA"
   DateModified "2011-10-28"
   TimeModified "11.10.02"
   BEGIN DSRECORD
      Identifier "ROOT"
      BEGIN DSSUBRECORD
         Owner "APT"
         Name "RecordJobPerformanceData"
         Value "0"
      END DSSUBRECORD
   END DSRECORD
END DSJOB

NA.txt
Code:
BEGIN DSJOB
   Identifier "NA"
   DateModified "2011-10-28"
   TimeModified "11.10.02"
   BEGIN DSRECORD
      Identifier "ROOT"
      BEGIN DSSUBRECORD
         Owner "APT"
         Name "RecordJobPerformanceData"
         Value "0"
      END DSSUBRECORD
   END DSRECORD
END DSJOB

and so...on based BEGIN DSJOB & END DSJOB..

Thanks in advance
# 2  
Old 08-17-2012
Code:
awk '($0 ~ /BEGIN DSJOB/){x=$0;getline;y=$2;gsub("\"","",y);f=1;print x > y".txt";}(f==1){if($0 ~ /END DSJOB/){f=0;print > y".txt"}else{print > y".txt"}}' file_name

# 3  
Old 08-17-2012
Another approach:
Code:
awk -F\" '/BEGIN DSJOB/{s=$0;getline;f=$(NF-1) ".txt";print s > f}{print > f} /END DSJOB/{close(f)}' file


Last edited by Franklin52; 08-17-2012 at 09:22 AM.. Reason: $(NF-1) instead of $NF
# 4  
Old 08-17-2012
Quote:
Originally Posted by Franklin52
Another approach:
Code:
awk -F\" '/BEGIN DSJOB/{s=$0;getline;f=$NF ".txt";print s > f}{print > f} /END DSJOB/{close(f)}' file

Will work if you make the {print >> f} append instead of overwrite.
# 5  
Old 08-17-2012
Quote:
Originally Posted by RudiC
Will work if you make the {print >> f} append instead of overwrite.
Nope. An excerption of the GNU Awk User's Guide:

Quote:
print items > output-file
This type of redirection prints the items into the output file named output-file. The file name output-file can be any expression. Its value is changed to a string and then used as a file name (see section 6. Expressions).

When this type of redirection is used, the output-file is erased before the first output is written to it. Subsequent writes to the same output-file do not erase output-file, but append to it. (This is different from how you use redirections in shell scripts.)
# 6  
Old 08-17-2012
When the statement print > f is run, the file referred to by the expression f will be clobbered the first time and the file will remain open until the end of the awk program or until the file is explicitly closed by close statement. All statements writing to this file during that period will append to it.

print >> f is similar but the file will be opened in append mode.
# 7  
Old 08-17-2012
Bug

Quote:
Originally Posted by Franklin52
Another approach:
Code:
awk -F\" '/BEGIN DSJOB/{s=$0;getline;f=$NF ".txt";print s > f}{print > f} /END DSJOB/{close(f)}' file

we need to give $(NF-1)

Code:
awk -F\" '/BEGIN DSJOB/{s=$0;getline;f=$(NF-1)".txt";print s > f}{print > f} /END DSJOB/{close(f)}' test_temp

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match text to lines in a file, iterate backwards until text or text substring matches, print to file

hi all, trying this using shell/bash with sed/awk/grep I have two files, one containing one column, the other containing multiple columns (comma delimited). file1.txt abc12345 def12345 ghi54321 ... file2.txt abc1,text1,texta abc,text2,textb def123,text3,textc gh,text4,textd... (6 Replies)
Discussion started by: shogun1970
6 Replies

2. Shell Programming and Scripting

awk to skip lines find text and add text based on number

I am trying to use awk skip each line with a ## or # and check each line after for STB= and if that value in greater than or = to 0.8, then at the end of line the text "STRAND BIAS" is written in else "GOOD". So in the file of 4 entries attached. awk tried: awk NR > "##"' "#" -F"STB="... (6 Replies)
Discussion started by: cmccabe
6 Replies

3. Shell Programming and Scripting

awk or perl script for preposition splitter

Hello, I am writing a Natural Language Parser and one of the tools I need is to separate prepositional phrase markers which begin with a Preposition. I have a long list of such markers (sample given below)and am looking for a script in awk or perl which will allow me to access a look-up file... (2 Replies)
Discussion started by: gimley
2 Replies

4. Shell Programming and Scripting

File splitter

I have below script which does splitting based on a different criteria. can it be amended to produce required result SrcFileName=XML_DUMP awk '/<\?xml version="1\.0" encoding="utf-8"\?>/{n++} n{f="'"${SrcFileName}_"'" sprintf("%04d",n) ".txt" print >> f close(f)}' $SrcFileName.txt My... (3 Replies)
Discussion started by: santosh2k2
3 Replies

5. Shell Programming and Scripting

Source xml file splitter

I have a source file that contains multiple XML files concatenated in it. The separator string between files is <?xml version="1.0" encoding="utf-8"?>. I wanted to split files in multiple files with mentioned names. I had used a awk code earlier to spilt files in number of lines i.e. awk... (10 Replies)
Discussion started by: santosh2k2
10 Replies

6. Shell Programming and Scripting

File Splitter output filename

Issue: I am able to split source file in multiple files of 10 rows each but unable to get the required outputfile name. please advise. Details: input = A.txt having 44 rows required output = A_001.txt , A_002.txt and so on. Can below awk be modified to give required result current... (19 Replies)
Discussion started by: santosh2k2
19 Replies

7. Shell Programming and Scripting

Syllable splitter in Perl

Hello, I am a relative newbie and want to split Names in English into syllables. Does anyone know of a perl script which does that. Since my main area is linguistics, I would be happy to add rules to it and post the perl script back for other users. I tried the CPan perl modules but they don't... (6 Replies)
Discussion started by: gimley
6 Replies

8. Programming

Help with splitter code in JAVA

I was creating a file using splitter and printwriter. The result in the file come out as: TO:bbb,ccc,eee Instead of, TO:bbb TO:ccc TO:eee May I know what's wrong with this? (1 Reply)
Discussion started by: eel
1 Replies

9. Shell Programming and Scripting

File splitter by nth row

I need to split a file into n separate files of about the same size. The way the file will be split is at every nth row, starting with the first row, that row will be cut and copied to it's corresponding new file so that each file has unique records. Any 'leftovers' will go into the last file. e.g.... (4 Replies)
Discussion started by: sitney
4 Replies
Login or Register to Ask a Question