extract blocks of text from a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting extract blocks of text from a file
# 8  
Old 05-18-2009
still can't get it right

Hello all,
I've been making some progress on splitting out this input file, but just can't figure it out completely.

Tried everything suggested, (sincere thanks to all who sent them) but couldn't get the array solution nor the awk nor the Python examples to work.

Here's what I've written so far. It does what I need at first - that is when it encounters a dashed line in the input, it skips the next blank line, then reads the next line of text, extracts a portion of that for the output filename (using 1st 20 char., compress spaces, and substiture slashes if they exist), but then I need it to read whatever text comes next into the output file just created, down to the next dashed lines it finds, then exit that loop and create the next output file as before.

First I tried another while loop (now commented out), but it just runs away and reads the whole file without stopping. I then tried just a second if statement I have inside the first, but this one reads only one more line of text and exits to the outer loop.

I know the way I do it might be clumsy, but it's all that I know and all that I've been able to find in the forums and on the internet. Can anyone help with this second loop? Thanks.

------------------------

#!/bin/ksh
file=$1
while read line; do

#extract first 10 characters to see if it's a dashed line delimiter
check=$(echo $line | awk '{ print substr( $0, 0, 10)}')
if [[ "$check" == "----------" ]]; then

#skip blank line
read line
read line

#extract first 20 characters of third line for output filename
path1=$(echo $line | awk '{ print substr( $0, 0, 20)}')

#remove any spaces
path2=$(echo $path1 | sed 's/ //g')

#if one exists, replace slash w/underscore
path=$(echo $path2 | sed 's/\//_/')

#create output file
echo $line > ${path}.stg_chk_out

############# THIS INNER LOOP NOT WORKING

#continue to read until next delimiter
####### while read line; do
check=$(echo $line | awk '{ print substr( $0, 0, 10)}')
if [[ "$check" != "----------" ]]; then
echo $line >> ${path}.stg_chk_out
read line
check=$(echo $line | awk '{ print substr( $0, 0, 10)}')
fi
###### done < $file
fi
done < $file
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to remove duplicate text blocks from a file?

Hi All I have a list of files which will have duplicate list of blocks of text. Following is a sample of the file, I have removed the sensitive information from the file. All the code samples starts from <TR BGCOLOR="white"> and Ends with IP address and two html tags like this. 10.14.22.22... (3 Replies)
Discussion started by: mahasona
3 Replies

2. Shell Programming and Scripting

Blocks of text in a file - extract when matches...

I sat down yesterday to write this script and have just realised that my methodology is broken........ In essense I have..... ----------------------------------------------------------------- (This line really is in the file) Service ID: 12345 ... (7 Replies)
Discussion started by: Bashingaway
7 Replies

3. Shell Programming and Scripting

Adding and removing blocks of text from file

Hello all, short story: I'm writing a script to add and remove dns records in dns files. Its on a RHEL 5.5 So far i've locked up the basic operations in a couple of functions: - validate the parameters - search for existant ip in file when adding - search for existant name records in... (6 Replies)
Discussion started by: maverick72
6 Replies

4. Shell Programming and Scripting

Extract sequences of bytes from binary for differents blocks

Hello to all, I would like to search sequences of bytes inside big binary file. The bin file contains blocks of information, each block begins is estructured as follow: 1- Each block begins with the hex 32 (1 byte) and ends with FF. After the FF of the last block, it follows 33. 2- Next... (59 Replies)
Discussion started by: Ophiuchus
59 Replies

5. Shell Programming and Scripting

Working with individual blocks of text using awk

Hi, I am working with CVS log data and have some data as follows. RCS file: /cvsroot/eclipse/org.eclipse.debug.core/core/org/eclipse/debug/core/IBreakpointListener.java,v head: 1.14 branch: locks: strict access list: keyword substitution: o total revisions: 15; selected... (3 Replies)
Discussion started by: sandeepk1611
3 Replies

6. Shell Programming and Scripting

how to split this file into blocks and then send these blocks as input to the tool called Yices?

Hello, I have a file like this: FILE.TXT: (define argc :: int) (assert ( > argc 1)) (assert ( = argc 1)) <check> # (define c :: float) (assert ( > c 0)) (assert ( = c 0)) <check> # now, i want to separate each block('#' is the delimeter), make them separate files, and then send them as... (5 Replies)
Discussion started by: paramad
5 Replies

7. Shell Programming and Scripting

How to read text in blocks

Hi, I have file which contains information written in blocks (every block is different). Is it possible to read every block one by one to another file (one block per file). The input is something like this <block1> <empty line> <block2> <empty line> ... ... ... <block25> <empty... (0 Replies)
Discussion started by: art84_)LV
0 Replies

8. Shell Programming and Scripting

Extract sequence blocks

Hi, I have an one-line file consisting of a sequence of 660 letters. I would like to extract 9-letter blocks iteratively: ASDFGHJKLQWERTYUIOPZXCVBNM first block: ASDFGHJKL 1nd block: SDFGHJKLQ What I have so far only gives me the first block, can anyone please explain why? cat... (7 Replies)
Discussion started by: solli
7 Replies

9. Programming

c program to extract text between two delimiters from some text file

needa c program to extract text between two delimiters from some text file. and then storing them in to diffrent variables ? text file like 0: abc.txt ========= aaaaaa|11111111|sssssssssss|333333|ddddddddd|34343454564|asass aaaaaa|11111111|sssssssssss|333333|ddddddddd|34343454564|asass... (7 Replies)
Discussion started by: kukretiabhi13
7 Replies

10. Shell Programming and Scripting

Delete blocks of lines from text file

Hello, Hello Firends, I have file like below. I want to remove selected blocks say abc,pqr,lst. how can i remove those blocks from file. zone abc { blah blah blah } zone xyz { blah blah blah } zone pqr { blah blah blah } (4 Replies)
Discussion started by: nrbhole
4 Replies
Login or Register to Ask a Question