Visit The New, Modern Unix Linux Community


print first few lines, then apply regex on a specific column to print results.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting print first few lines, then apply regex on a specific column to print results.
# 1  
print first few lines, then apply regex on a specific column to print results.

abc.dat
Code:
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics 
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
0.0 133.2 0.0 682.9  0.0  1.0  0.0    7.2    0 79 c1t0d0
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx

I want to skip first 5 line headers. Then select rows with column 11 starts with 'aaaaaa1'.

Code:
 
# Print first 5 rows + all rows from 6th row whose column 11 starts with
#  'aaaaaa1' string.
cat abc.dat | awk '(NR<6) {print}; (NR>5), $11 ~ /^aaaaaa1/'

Apparently last part of awk is not filtering 6th row even though its 11 th column does not start with 'aaaaaa1' string.

Please correct it..
# 2  
Quote:
Originally Posted by kchinnam
abc.dat
Code:
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics 
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
0.0 133.2 0.0 682.9  0.0  1.0  0.0    7.2    0 79 c1t0d0
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx

I want to skip first 5 line headers. Then select rows with column 11 starts with 'aaaaaa1'.
...

Code:
$
$
$ cat abc.dat
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
0.0 133.2 0.0 682.9  0.0  1.0  0.0    7.2    0 79 c1t0d0
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx
$
$
$ perl -lane '$.>5 && print if $F[10] =~ /^aaaaaa1/' abc.dat
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx
$
$
$ awk 'NR>5 && $11 ~ /^aaaaaa1/' abc.dat
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx
$
$

Ok, seems like I misread it.
If you want to print the first 5 lines and apply the condition from line 6 onwards then -

Code:
$
$
$ perl -lane 'print if $.>5 && $F[10] =~ /^aaaaaa1/ || $.<=5' abc.dat
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx
$
$
$
$ awk 'NR<=5 || NR>5 && $11 ~ /^aaaaaa1/' abc.dat
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
0.2 180.4 0.1 5471.2 3.0  2.8  16.4  15.6   15 52 aaaaaa1-xx
$
$

tyler_durden

Last edited by durden_tyler; 08-24-2010 at 03:30 PM..
# 3  
Thanks. That works.. I will go with last command..
I also want to use a variable in place of search string 'aaaaaa1'. For some reason awk's variable substitution does not seem to working,,

Code:
# since /bin/awk is older version,, it does not recongnize -v flag, so I am using awk from /usr/xpg4/bin/ library.

var1='aaaaaa1'; /usr/xpg4/bin/awk -v var2=$var1 'NR<=5 || NR>5 && $11 ~ /^var2/' abc.dat

tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics 
r/s w/s   kr/s kw/s  wait actv wsvc_t asvc_t %w %b device
<nothing>

Please let me know how to correct the above awk to recognize string variable in place of regex expression..
# 4  
Try:
Code:
var1='aaaaaa1'; /usr/xpg4/bin/awk -v var2=$var1 'NR<=5 || NR>5 && $11 ~ "^"var2' abc.dat

# 5  
Perfect.. Thanks a lot.

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #54
Difficulty: Easy
COBOL stands for 'Common Business Oriented Language'.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

(n)awk: print regex search output lines in one line

Hello. I have been looking high and low for the solution for this. I seems there should be a simple answer, but alas. I have a big xml file, and I need to extract certain information from specific items. The information I need can be found between a specific set of tags. let's call them... (2 Replies)
Discussion started by: Tobias-Reiper
2 Replies

2. Shell Programming and Scripting

Parsing OSX UNIX command results which print in multiple lines

from the CLI on a Mac, if you type networksetup -listallnetworkservices then you get results in a multi-line paragraph that look something like this: networksetup -listallnetworkservices An asterisk (*) denotes that a network service is disabled. Wi-Fi Display Ethernet Bluetooth DUN... (7 Replies)
Discussion started by: hungryd
7 Replies

3. Shell Programming and Scripting

How to print multiple specific column after a specific word?

Hello.... Pls help me (and sorry my english) :) So I have a file (test.txt) with 1 long line.... for example: isgc jsfh udgf osff 8462 error iwzr 653 idchisfb isfbisfb sihfjfeb isfhsi gcz eifh How to print after the "error" word the 2nd 4th 5th and 7th word?? output well be: 653 isfbisfb... (2 Replies)
Discussion started by: marvinandco
2 Replies

4. Shell Programming and Scripting

awk Print New Column For Every Two Lines and Match On Multiple Column Values to print another column

Hi, My input files is like this axis1 0 1 10 axis2 0 1 5 axis1 1 2 -4 axis2 2 3 -3 axis1 3 4 5 axis2 3 4 -1 axis1 4 5 -6 axis2 4 5 1 Now, these are my following tasks 1. Print a first column for every two rows that has the same value followed by a string. 2. Match on the... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

5. Shell Programming and Scripting

Print lines that contain a value in a specific column shared by more than 1 entity in another col

I want to expand on a question that I just asked here: I want to extract only those values in Column 2 that are shared by at least 2 unique values in Column 2. Using the same input (in this case 3- tab-separated columns): waterline-n below-sheath-v 14.8097 dock-n below-sheath-v ... (2 Replies)
Discussion started by: owwow14
2 Replies

6. UNIX for Dummies Questions & Answers

How to print results from two lines using awk?

I need to print a specific string from an html file that's always occurring between two other known strings. Example: from the text below, I would like to print the bolded part: <this is a lot of text before the string I want to print> fullpath: abc/def/ghi/example.xlf -cfver. <sample text... (15 Replies)
Discussion started by: danegon
15 Replies

7. Shell Programming and Scripting

To print lines between 2 timestamps using awk|sed and regex

Hi, I am using the following code to fetch lines that are generated in last 1 hr . Hence, I am using date function to calculate -last 1 hr & the current hr and then somehow use awk (or sed-if someone could guide me better) with some regex pattern. dt_1=`date +%h" "%d", "%Y\ %l -d "1 hour... (10 Replies)
Discussion started by: sarah-alikhan31
10 Replies

8. Shell Programming and Scripting

Print lines that match regex on xth string

Hello, I need an awk command to print only the lines that match regex on xth field from file. For example if I use this command awk -F"|" ' $22 == "20130117090000.*" 'It wont work, I think, because single quotes wont allow the usage of the metacharacter star * . On the other hand I dont know... (2 Replies)
Discussion started by: black_fender
2 Replies

9. Shell Programming and Scripting

Print lines after regex

Hello, I need to print four lines inmediatly after the regexp, but not the line containing the regexp. The print should show the four lines together in one. Thanks! (13 Replies)
Discussion started by: auratus42
13 Replies

10. Shell Programming and Scripting

Question about sort specific column and print other column at the same time !

Hi, This is my input file: ali 5 usa abc abu 4 uk bca alan 6 brazil bac pinky 10 utah sdc My desired output: pinky 10 utah sdc alan 6 brazil bac ali 5 usa abc abu 4 uk bca Based on the column two, I want to do the descending order and print out other related column at the... (3 Replies)
Discussion started by: patrick87
3 Replies

Featured Tech Videos