[Solved] awk command to read sequentially from a file until last record


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [Solved] awk command to read sequentially from a file until last record
# 1  
Old 06-04-2013
Question [Solved] awk command to read sequentially from a file until last record

Hello, I have a file that looks like this:
Code:
Generated geometry (...some special descriptor)
1  0.56784  1.45783  -0.87965
8  1.29873  -0.8767  1.098789
...  ...            ...           ...
Generated geometry (....come special descriptor)
...   ....   ...   ...
...    ...   ...   ...

and it continues like that... I'm pretty sure there is a way (probably a while loop with read command within awk) to read the first set of data after the first "Generated geometry" statement, redirect it to an output file, then proceed to read the next set of data after the second "Generated geometry" statement and redirect it to another output file, and so on until the last set of data (after the last "Generated geometry statement").
Can somebody help me with this? I have tried using the "Generated geometry" statement as flags, and trying to print between flags, but since there are too many of those statements it gets all messed up.
Thank you,
# 2  
Old 06-04-2013
Code:
awk 'BEGIN{ cnt=1} 
                  /Generated/ {ofile=sprintf("file%04d", cnt++) ; next}
                  /Generated/ && FNR > 1 {close(ofile)}
                  {print $0 > ofile) } '  inputfile

This produces files: file0001, file0002...file9999. See if that works for you.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 06-04-2013
Thanks for your reply. It seems to work very well, for the first 17 files file0001-file0017 (they are supposed to be 21 in total), but I get the following error message, which I beleive might be for the memory usage or something like that:
Code:
awk: file0018 makes too many open files
input record number 172, file tempfile7
source line number 4

# 4  
Old 06-04-2013
Actually, it means exactly what it says... Too many open files. The close() isn't working for some reason. Memory usage is a nonissue, since we're not actually storing anything in memory.

I think the close should come first, otherwise it will never close the previous file, just the current one (which gets immediately reopened).

Code:
awk '/Generated/ && ofile {close(ofile)}
                  /Generated/ {ofile=sprintf("file%04d", ++cnt) ; next}
                  {print $0 > ofile) } '  inputfile


Last edited by Corona688; 06-04-2013 at 02:50 PM..
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 06-04-2013
It worked just perfect! Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Pass an array to awk to sequentially look for a list of items in a file

Hello, I need to collect some statistical results from a series of files that are being generated by other software. The files are tab delimited. There are 4 different sets of statistics in each file where there is a line indicating what the statistic set is, followed by 5 lines of values. It... (8 Replies)
Discussion started by: LMHmedchem
8 Replies

2. Homework & Coursework Questions

awk command to retrieve record 23 and 89 from UNIX file

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: I am looking for awk command to retrieve only the record number 23 and record number 89 from a unix file?... (6 Replies)
Discussion started by: rakeshp
6 Replies

3. UNIX for Beginners Questions & Answers

awk command to retrieve record 23 and 89 from UNIX file

Hi Everyone, I am looking for awk command to retrieve only the record number 23 and record number 89 from a unix file? Please let me know what is the awk command for this? Regards Rakesh (1 Reply)
Discussion started by: rakeshp
1 Replies

4. Shell Programming and Scripting

awk command to omit trailer record in a file

I am trying to omit the trailer record in a variable width file I tried using awk 'NR >1 { print prev } { prev = $0 }' filename The above command is giving output but somehow it is trimming columns from the record. For example if my record has columns A,B,C,D The awk gives output as A,B,C ... (4 Replies)
Discussion started by: abhilashnair
4 Replies

5. Shell Programming and Scripting

Read input file with in awk script not through command line

Hi All, Do we know how to read input file within awk script and send output toanother log file. All this needs to be in awk script, not in command line. I am running this awk through crontab. Cat my.awk #!/bin/awk -f function test(var){ some code} { } END { print"test code" } (5 Replies)
Discussion started by: random_thoughts
5 Replies

6. Shell Programming and Scripting

[Solved] awk manipulation of sequentially named files

Hello, I am a very novice user of awk, I have a set of files named file001, file002, file003, file004, etc., each contains four fields (columns of data) separated each by a uneven number of spaces. I want to substitute those spaces by a TAB, so I am using this line of awk script: awk -v OFS="\t"... (4 Replies)
Discussion started by: jaldo0805
4 Replies

7. Shell Programming and Scripting

Read a input file and insert it to UDB sequentially

Guys, I'm very new to Unix script. I need to add some logics into the existing script. Read a record 1) if it's a header record then verify the file sequence no aginst the file sequence no in UDB control table. 2) if Step 1 is ok then CONNECT UDB otherwise stop or abend. 3) if... (0 Replies)
Discussion started by: Sunny TK Sun
0 Replies

8. Shell Programming and Scripting

Read the record from a text file

Hi I want to read one row record from a text file. For eg: I have Sample.txt file with one row of record like 123456768 I want to get the above value from the file and assign it to a variable in my script. Please guide me how to proceed. Thanks, Soll (2 Replies)
Discussion started by: sollins
2 Replies

9. UNIX for Dummies Questions & Answers

how to read record by record from a file in unix

Hi guys, i have a big file with the following format.This includes header(H),detail(D) and trailer(T) information in the file.My problem is i have to search for the character "6h" at 14 th and 15 th position in all the records .if it is there i have to write all those records into a... (1 Reply)
Discussion started by: raoscb
1 Replies

10. Shell Programming and Scripting

read record from file

Hi all I have file f1 like this: Set AM/PM indicator to PM started|14155| Generate Error Re|7| Projected Cash Ba|741| Roll System Date |4| Projected Cash Balances started|2| Process Mark To Market started|13429| Process paydowns started|14189| Process Fixed Inc|439| Process Mark To... (3 Replies)
Discussion started by: koti_rama
3 Replies
Login or Register to Ask a Question