Command/script to match a field and print the next field of each line in a file.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Command/script to match a field and print the next field of each line in a file.
# 1  
Old 08-10-2015
Command/script to match a field and print the next field of each line in a file.

Hello,

I have a text file in the below format:
Code:
Source                                                                                              Destination                                                                              State          Lag        Status
CQA02W2K12pl:D:\CAQA                                                                            infrabkpsrvpl:/vol/CQA02W2K12srv/CAQA                                                Snapvaulted    13:46:44   Idle
DBIntranetpl:E:\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL                                  infrabkpsrvpl:/vol/DBIntranetsrv/MSSQL10                                                Snapvaulted    13:46:43   Idle

And the file has hundreds of such entries.

What I'm interested in is the lag column- which is always in the format hh:mm:ss. I want to read the file line by line, check if the "lag" column in greater than 48:00:00 (just matching the hour field would be enough) and if the lag is greater than 48:00:00, append that particular line to another file.

How can I achieve this?

I tried awk, but since some of the line descriptions have spaces, $4 is not always lag column.

Thanks,
Pocodot
# 2  
Old 08-10-2015
here's something to start with:
Code:
awk '{print $(NF-1)}' myFile

# 3  
Old 08-10-2015
Thanks! Here's something else i'm trying based on your reply:

Code:
 awk '{if($(NF-1) < 48) print $0}'   OP.txt > output.txt

This command would be perfect for me, but $(NF-1) is in the format hh:mm:ss.

Is there any way I can just compare the hh part ?

Thanks,
Pocodot
# 4  
Old 08-10-2015
Code:
awk  '$(NF-1) ~ /..:..:../ {split($(NF-1), a, ":"); if(a[1] < 48)print} OP.txt > output.txt

This User Gave Thanks to Aia For This Post:
# 5  
Old 08-10-2015
Assuming there are never any spaces in the Status field, try:
Code:
awk -F'[[:space:]]+|:' '$(NF-3) + 0 >= 48' OP.txt >> output.txt

Note the >> redirection operator instead of >. (You said you wanted to append to the destination file; not replace its current contents.)
# 6  
Old 08-10-2015
Thats perfect! Thanks!
# 7  
Old 08-11-2015
I guess it doesn't work on my shell.

Code:
[aia@ludus tmp]$ nl pocodot.file
     1  Source                                                                                              Destination                                                                              State          Lag        Status
     2  CQA02W2K12pl:D:\CAQA                                                                            infrabkpsrvpl:/vol/CQA02W2K12srv/CAQA                                                Snapvaulted    13:46:44   Idle
     3  DBIntranetpl:E:\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL                                  infrabkpsrvpl:/vol/DBIntranetsrv/MSSQL10                                                Snapvaulted    13:46:43   Idle

Code:
[aia@ludus tmp]$ awk -F'[[:space:]]+|:' '$(NF-3) + 0 >= 48' pocodot.file
[aia@ludus tmp]$ echo $?
0


It appears that the logic is broken
Code:
[aia@ludus tmp]$ awk -F'[[:space:]]+|:' '{print $(NF-3) + 0, ">=", 48}' pocodot.file
0 >= 48
13 >= 48
13 >= 48


Last edited by Aia; 08-11-2015 at 12:21 AM.. Reason: Add broken logic as clarification that it is not the shell's problem.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to print text in field if match and range is met

In the awk below I am trying to match the value in $4 of file1 with the split value from $4 in file2. I store the value of $4 in file1 in A and the split value (using the _ for the split) in array. I then strore the value in $2 as min, the value in $3 as max, and the value in $1 as chr. If A is... (6 Replies)
Discussion started by: cmccabe
6 Replies

2. UNIX for Beginners Questions & Answers

Use strings from nth field from one file to match strings in entire line in another file, awk

I cannot seem to get what should be a simple awk one-liner to work correctly and cannot figure out why. I would like to use patterns from a specific field in one file as regex to search for matching strings in the entire line ($0) of another file. I would like to output the lines of File2 which... (1 Reply)
Discussion started by: jvoot
1 Replies

3. Shell Programming and Scripting

Match columns and print specific field

Hello, I have data in following format. ... (6 Replies)
Discussion started by: Pushpraj
6 Replies

4. UNIX for Dummies Questions & Answers

Match pattern in a field, print pattern only instead of the entire field

Hi ! I have a tab-delimited file, file.tab: Column1 Column2 Column3 aaaaaaaaaa bbtomatoesbbbbbb cccccccccc ddddddddd eeeeappleseeeeeeeee ffffffffffffff ggggggggg hhhhhhtomatoeshhh iiiiiiiiiiiiiiii ... (18 Replies)
Discussion started by: lucasvs
18 Replies

5. Shell Programming and Scripting

AWK: Pattern match between 2 files, then compare a field in file1 as > or < field in file2

First, thanks for the help in previous posts... couldn't have gotten where I am now without it! So here is what I have, I use AWK to match $1 and $2 as 1 string in file1 to $1 and $2 as 1 string in file2. Now I'm wondering if I can extend this AWK command to incorporate the following: If $1... (4 Replies)
Discussion started by: right_coaster
4 Replies

6. Shell Programming and Scripting

simplify the script, check field match to value in a file

Hi Everyone, Below is the script, i feel there should be more simple way to do the same output, my one works, but feel not nice. like using index i feel it is slow (image my file is very large), maybe awk can do one line code? Please advice. # cat 1.txt 1 a 2 b 3 cc 4 d # cat 1.pl... (6 Replies)
Discussion started by: jimmy_y
6 Replies

7. Shell Programming and Scripting

need Shell script for Sort BASED ON FIRST FIELD and PRINT THE WHOLE FILE WITHOUT DUPLICATES

Can some one provide me a shell script. I have file with many columns and many rows. need to sort the first column and then remove the duplicates records if exists.. finally print the full data with first coulm as unique. Sort BASED ON FIRST FIELD and remove the duplicates if exists... (2 Replies)
Discussion started by: tuffEnuff
2 Replies

8. Shell Programming and Scripting

Script to Match first field of two Files and print

Hi, I want to get script or command in Sun Unix which matches first fields of both the files and print the feilds of one files, example may make it more clear. InputFile1 ================== Alex,1,fgh Menthos,45454,toto Gothica,855,ee Zenie4,77,gg Salvatore,66,oo Dhin,1234,papapa... (3 Replies)
Discussion started by: indian.ace
3 Replies

9. Shell Programming and Scripting

how to print field n of line m

Hi everyone, I have a basic csh/awk question. How do I print a given field from a given line in a given file? Thanks in advance! (11 Replies)
Discussion started by: Deanne
11 Replies

10. Shell Programming and Scripting

Print last occurrence if first field match

Hi All, I have an input below. If the term in the 1st column is equal, print the last row which 1st column is equal.In the below example, it's " 0001 k= 27 " and " 0004 k= 6 " (depicted in bold). Those terms in 1st column which are not repetitive are to be printed as well. Can any body help me... (9 Replies)
Discussion started by: Raynon
9 Replies
Login or Register to Ask a Question