Qn on awk greping values

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Qn on awk greping values
# 1  
Old 06-30-2017
Question Qn on awk greping values

Hello Experts,

I was trying to awk out some data out of a text file.
Below is a sample file which I have
Code:
xxx ***Wed Jun 28 18:00:59 CDT 2015
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.10    0.00    4.56    2.86    0.00   75.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    1.00    1.00     0.50     0.50     1.00     0.00    1.00   1.00   0.20
sdf               0.00     0.00   28.00  910.00   865.00  9985.00    23.13     1.38    1.47   0.12  11.70
sde               0.00     0.00    0.00    2.00     0.00     4.00     4.00     0.00    1.00   1.00   0.20

xxx ***Wed Jun 28 18:01:59 CDT 2015
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.10    0.00    4.56    2.86    0.00   75.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    1.00    1.00     0.50     0.50     1.00     0.00    1.00   1.00   0.20
sdf               0.00     0.00   28.00  910.00   865.00  9985.00    23.13     1.38    1.47   0.12  12.70
sde               0.00     0.00    0.00    2.00     0.00     4.00     4.00     0.00    1.00   1.00   0.20

I want an output like below
Code:
xxx ***Wed Jun 28 18:00:59 CDT 2015
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.10    0.00    4.56    2.86    0.00   75.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdf               0.00     0.00   28.00  910.00   865.00  9985.00    23.13     1.38    1.47   0.12  11.70

xxx ***Wed Jun 28 18:01:59 CDT 2015
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          17.10    0.00    4.56    2.86    0.00   75.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdf               0.00     0.00   28.00  910.00   865.00  9985.00    23.13     1.38    1.47   0.12  12.70

Basically, the awk is searching value on columns 1-12 >10 and print the whole line & the header lines.

I managed to get the command to grep the values on columns. But couldn't find a way to just print the 4 lines above the one which start with Device:

Code:
awk -F "[: ]" '{for (i=12;i<=NF;i++) if ($i>=50){print $0;next}}' infile

Thanks in advance
Dev


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 06-30-2017 at 07:18 PM.. Reason: Added CODE tags.
# 2  
Old 06-30-2017
Your example is a bit odd.
And comparing all the columns with one number is a bit odd, too.
The following demonstrates how the header is stored in a buffer header and how control variables inheader and doheader control the collecting of the buffer and its printing, respectively.
The decision if its the header is done by the (NF<12) condition.
Code:
awk '(NF<12) {if (inheader) {header=(header RS $0)} else {header=$0; inheader=doheader=1} next} {inheader=0; for (i=2; i<=NF; i++) if ($i+0>=50) {if (doheader) {print header; doheader=0} print; break}}' infile

Or, as a multi-liner
Code:
awk '
(NF<12) {
  if (inheader) {
    header=(header RS $0)
  } else {
    header=$0
    inheader=doheader=1
  }
  next
}
{
  inheader=0
  for (i=2; i<=NF; i++)
    if ($i+0>=50) {
      if (doheader) {
        print header
        doheader=0
      }
      print
      break
    }
}' infile

This User Gave Thanks to MadeInGermany For This Post:
# 3  
Old 07-03-2017
Thank you for the pointer. The output is from a script that runs unix IO stat every minute and spool to one single file. The script you provided is exactly doing what I wanted. After may days of unsuccessful efforts, glad that I could get some help here.

Smilie

Last edited by DevAnand; 07-03-2017 at 12:52 PM.. Reason: add more info
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk and greping between lines

i want to grab lines from a file that are between two patterns (including the lines that contain the pattern). here's what im currently doing: data.txt aaa bbb cccc ddd eee ffff ddd code: awk '/bbb/,/fff/ && $0 !~ /ddd/' cdsnmp.sh I want to grab lines between and including bbb... (5 Replies)
Discussion started by: SkySmart
5 Replies

2. Shell Programming and Scripting

awk file to read values from Db2 table replacing hard coded values

Hi, I want to replace a chain of if-else statement in an old AWK file with values from Db2 table or CSV file. The part of code is below... if (start_new_rec=="true"){ exclude_user="false"; user=toupper($6); match(user, "XXXXX."); if (RSTART ==2 ) { ... (9 Replies)
Discussion started by: asandy1234
9 Replies

3. Shell Programming and Scripting

How to find the X highest values in a list depending on the values of another list with bash/awk?

Hi everyone, This is an exemple of inpout.txt file (a "," delimited text file which can be open as csv file): ID, Code, Value, Store SP|01, AABBCDE, 15, 3 SP|01, AABBCDE, 14, 2 SP|01, AABBCDF, 13, 2 SP|01, AABBCDE, 16, 3 SP|02, AABBCED, 15, 2 SP|01, AABBCDF, 12, 3 SP|01, AABBCDD,... (1 Reply)
Discussion started by: jeremy589
1 Replies

4. Shell Programming and Scripting

Greping values from a text file

Hi All, I have 100's of files in the following format. I need to grep or parse out some values from each of the files {  “tree”: “((A:0.2{0},B:0.09{1}):0.7{2},C:0.5{3}){​4};”,  “placements”:  , ], “n”: },   {“p”: ], “n”: } ],  “metadata”:  {“invocation”:   “pplacer -c... (1 Reply)
Discussion started by: Lucky Ali
1 Replies

5. Shell Programming and Scripting

Greping the column with a value greater than 50 with awk

Hi All, I am running a command from a remote server using ssh to different servers. I will get a output like below with 4 columns. I want to grab line which is having a coulmn which grate than or equal to 50. How can I do it with Awk or sed ??. I add a space to first row with sed 's/::/:: /g' to... (4 Replies)
Discussion started by: raghin
4 Replies

6. Shell Programming and Scripting

Greping array values in Bash like Perl

Hi, Is there an easy way to simulate following Perl code in Bash. if ( grep {$my_value eq $_} @ARGV ){ print "Do Something\n"; } else { die "Invalid value"; } (0 Replies)
Discussion started by: paragkalra
0 Replies

7. Shell Programming and Scripting

AWK: read values from file1; search for values in file2

I have read another post about this issue and am wondering how to adapt it to my own, much simpler, issue. I have a file of user IDs like so: 333333 321321 546465 ...etc I need to take each number and use it to print records wherein the 5th field matches the user ID pulled from the... (2 Replies)
Discussion started by: Bubnoff
2 Replies

8. Shell Programming and Scripting

How to pick values from column based on key values by usin AWK

Dear Guyz:) I have 2 different input files like this. I would like to pick the values or letters from the inputfile2 based on inputfile1 keys (A,F,N,X,Z). I have done similar task by using awk but in that case the inputfiles are similar like in inputfile2 (all keys in 1st column and values in... (16 Replies)
Discussion started by: repinementer
16 Replies

9. Shell Programming and Scripting

problem in greping the string from file using awk

I am using awk command for greping an value from the file the file contains .. file ---------------------------- content----------- -------- String main = "81507066666"; ------------------------------ i am greping the above value using awk command NumberToReplace=`cat "file" | grep... (1 Reply)
Discussion started by: vastare
1 Replies
Login or Register to Ask a Question