awk help


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers awk help
# 1  
Old 02-16-2009
awk help

Hi,
I just started using linux, and I am trying to use awk to search for a string in a document. If it exists I would like to print the next 33 lines(there will be mulitple matches in these files). Ive tried variations of this form, but dont know how to print by line.


awk '{if ($4=1970) print ???? }' oldfile>newfile.dat

Thanks for any tips
# 2  
Old 02-16-2009
Try:

Code:
awk 'c&&c--;/pattern/{c=33}' infile

If you want to include the matching line:

Code:
awk '/pattern/{c=33}c&&c--' infile

Add one to c if you want the matching line and the following 33 lines (total 34 lines).
# 3  
Old 02-16-2009
Opps, I forgot to mention the first field for this line needs to say "start" as well can this be added in to that search pattern?
Let me try and clarify...
I am looking for these two things in the line and if they match I need all the lines after that until the next "start" This is much harder than I first thought.
start xxx xxx 1970

sorry about the initial confusion
# 4  
Old 02-16-2009
It would help if you posted a sample data file using BB Codes and a desired output.

Assuming there's no matching 'stop' for 'start':
Code:
nawk '/^start.*1970/ {c++;print "--";next} c'

# 5  
Old 02-16-2009
This might be a dumb question but I dont think I have the nawk command. Can this be run using just awk.
I am new to our system and it says nawk command not found
# 6  
Old 02-16-2009
This is the format of the file. The output can be the same. I just need to extract the entire line with "start", and a value in the fourth column, and all of the following info until the next "start" for the entire file. Im sorry this might be confusing, I am very new to this.

Code:
start     -71.50000     40.37000    1981       1       7       8       1
      0.00000      7.43000   9999.00000
     25.00000      7.50000   9999.00000
     45.00000      7.51000   9999.00000
     60.00000      7.68000   9999.00000
     64.00000      8.72000   9999.00000
     66.00000     10.13000   9999.00000
     69.00000     10.82000   9999.00000
     81.00000     10.83000   9999.00000
start     -71.52700     40.15500    1981       1       7       7       2
      0.00000      9.51000   9999.00000
      4.00000      9.39000   9999.00000
     35.00000      9.39000   9999.00000
     64.00000      9.46000   9999.00000
     68.00000     10.69000   9999.00000
     70.00000     10.94000   9999.00000
     85.00000     10.98000   9999.00000

I hope this comes through alright

Last edited by vgersh99; 02-16-2009 at 02:21 PM.. Reason: BB code tags
# 7  
Old 02-16-2009
Quote:
Originally Posted by d_kowalske
This is the format of the file. The output can be the same. I just need to extract the entire line with "start", and a value in the fourth column, and all of the following info until the next "start" for the entire file. Im sorry this might be confusing, I am very new to this.

start -71.50000 40.37000 1981 1 7 8 1
0.00000 7.43000 9999.00000
25.00000 7.50000 9999.00000
45.00000 7.51000 9999.00000
60.00000 7.68000 9999.00000
64.00000 8.72000 9999.00000
66.00000 10.13000 9999.00000
69.00000 10.82000 9999.00000
81.00000 10.83000 9999.00000
start -71.52700 40.15500 1981 1 7 7 2
0.00000 9.51000 9999.00000
4.00000 9.39000 9999.00000
35.00000 9.39000 9999.00000
64.00000 9.46000 9999.00000
68.00000 10.69000 9999.00000
70.00000 10.94000 9999.00000
85.00000 10.98000 9999.00000

I hope this comes through alright
Try this:

Code:
awk '
/start/ {p=1;print $4;next}
/start/ && p {exit}
p' file

Regards
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk output yields error: awk:can't open job_name (Autosys)

Good evening, Im newbie at unix specially with awk From an scheduler program called Autosys i want to extract some data reading an inputfile that comprises jobs names, then formating the output to columns for example 1. This is the inputfile: $ more MapaRep.txt ds_extra_nikira_usuarios... (18 Replies)
Discussion started by: alexcol
18 Replies

2. Shell Programming and Scripting

Pass awk field to a command line executed within awk

Hi, I am trying to pass awk field to a command line executed within awk (need to convert a timestamp into formatted date). All my attempts failed this far. Here's an example. It works fine with timestamp hard-codded into the command echo "1381653229 something" |awk 'BEGIN{cmd="date -d... (4 Replies)
Discussion started by: tuxer
4 Replies

3. Shell Programming and Scripting

Passing awk variable argument to a script which is being called inside awk

consider the script below sh /opt/hqe/hqapi1-client-5.0.0/bin/hqapi.sh alert list --host=localhost --port=7443 --user=hqadmin --password=hqadmin --secure=true >/tmp/alerts.xml awk -F'' '{for(i=1;i<=NF;i++){ if($i=="Alert id") { if(id!="") if(dt!=""){ cmd="sh someScript.sh... (2 Replies)
Discussion started by: vivek d r
2 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

awk command to compare a file with set of files in a directory using 'awk'

Hi, I have a situation to compare one file, say file1.txt with a set of files in directory.The directory contains more than 100 files. To be more precise, the requirement is to compare the first field of file1.txt with the first field in all the files in the directory.The files in the... (10 Replies)
Discussion started by: anandek
10 Replies

6. Shell Programming and Scripting

Comparison and editing of files using awk.(And also a possible bug in awk for loop?)

I have two files which I would like to compare and then manipulate in a way. File1: pictures.txt 1.1 1.3 dance.txt 1.2 1.4 treehouse.txt 1.3 1.5 File2: pictures.txt 1.5 ref2313 1.4 ref2345 1.3 ref5432 1.2 ref4244 dance.txt 1.6 ref2342 1.5 ref2352 1.4 ref0695 1.3 ref5738 1.2... (1 Reply)
Discussion started by: linuxkid
1 Replies

7. Shell Programming and Scripting

Problem with awk awk: program limit exceeded: sprintf buffer size=1020

Hi I have many problems with a script. I have a script that formats a text file but always prints the same error when i try to execute it The code is that: { if (NF==17){ print $0 }else{ fields=NF; all=$0; while... (2 Replies)
Discussion started by: fate
2 Replies

8. Shell Programming and Scripting

awk: assign variable with -v didn't work in awk filter

I want to filter 2nd column = 2 using awk $ cat t 1 2 2 4 $ VAR=2 #variable worked in print $ cat t | awk -v ID=$VAR ' { print ID}' 2 2 # but variable didn't work in awk filter $ cat t | awk -v ID=$VAR '$2~/ID/ { print $0}' (2 Replies)
Discussion started by: honglus
2 Replies

9. Shell Programming and Scripting

scripting/awk help : awk sum output is not comming in regular format. Pls advise.

Hi Experts, I am adding a column of numbers with awk , however not getting correct output: # awk '{sum+=$1} END {print sum}' datafile 2.15291e+06 How can I getthe output like : 2152910 Thank you.. # awk '{sum+=$1} END {print sum}' datafile 2.15079e+06 (3 Replies)
Discussion started by: rveri
3 Replies

10. Shell Programming and Scripting

Awk problem: How to express the single quote(') by using awk print function

Actually I got a list of file end with *.txt I want to use the same command apply to all the *.txt Thus I try to find out the fastest way to write those same command in a script and then want to let them run automatics. For example: I got the file below: file1.txt file2.txt file3.txt... (4 Replies)
Discussion started by: patrick87
4 Replies
Login or Register to Ask a Question