awk strings search + print next column after match


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk strings search + print next column after match
# 8  
Old 10-24-2011
Code:
awk -v srch="v. d. Chijs" '{for(i=1;i<=NF;i++){if(match(srch,$i)){val=$(i+1)}}}
END{print srch" "val}' input_file

--ahamed[/QUOTE]

Thanks, first posted code works! Though since the search patterns are stored in a file I guess the second code provided is more suitable.

Last edited by sdf; 04-02-2012 at 05:39 AM..
# 9  
Old 03-30-2012
Need help with an adjustment...

Hello Ahamed101,

This script is great. I've adapted it for a project I'm working on. I've got something that looks like this:

Code:
awk -v srch="foo" 'BEGIN{l=length(srch)}
{t=match($0,srch);if(!t){next}$0=substr($0,t+l);print "type " srch" "$1}'

I am parsing a line that has "foo" over and over again on the same line. When using this script example, it gets the first "foo" plus one column over.

But then it stops processing that line. The lines look something like this:

Code:
this is the entry foo bar1 and perhaps foo bar2 or foo bar3
this is the entry foo bar2-1 and perhaps foo bar2-2 or foo bar3-3
this is the entry foo bar3-1 and foo bar3-2 maybe or foo bar3-3

so the current output from the adaptation above looks like:

Code:
type bar1
type bar2-1
type bar3-1

But I need to parse every column after foo on each line. So that my output would look more like:

Code:
type bar1
type bar2
type bar3
type bar2-1
type bar2-2
type bar2-3
type bar3-1
type bar3-2
type bar3-3

Any assistance you can provide would be helpful.

Last edited by Scrutinizer; 03-31-2012 at 05:54 AM.. Reason: Please Use [code] tags [/code]
# 10  
Old 03-30-2012
Why not just use 'foo' as your field separator? Then every field except the first will have what you want right at the beginning, no need to check every field or mess with match(). You'll need to do the splitting yourself, but for the trouble saved it's worth it.

Code:
$ awk -v FS="foo" '{ for(N=2; N<=NF; N++) { split($N, A, " "); print "type", A[1]; } }' data

type bar1
type bar2
type bar3
type bar2-1
type bar2-2
type bar3-3
type bar3-1
type bar3-2
type bar3-3

$

# 11  
Old 03-30-2012
Thank you! You were absolutely right about changing the field separator. I hadn't thought of it in those terms. Have a great day!
This User Gave Thanks to smb For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. Shell Programming and Scripting

awk to print match or non-match and select fields/patterns for non-matches

In the awk below I am trying to output those lines that Match between file1 and file2, those Missing in file1, and those missing in file2. Using each $1,$2,$4,$5 value as a key to match on, that is if those 4 fields are found in both files the match, but if those 4 fields are not found then missing... (0 Replies)
Discussion started by: cmccabe
0 Replies

3. UNIX for Beginners Questions & Answers

Match Strings between two files, print portions of each file together when matched ([g]awk)

I have two files and desire to use the strings from $1 of file 1 (file1.txt) as search criteria to find matches in $2 of file 2 (file2.txt). If matches are found I want to output the entire line of file 2 (file2.txt) followed by fields $2-$11 of file 1 (file1.txt). I can find the matches, I cannot... (7 Replies)
Discussion started by: jvoot
7 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 only lines where fields concatenated match strings

Hello everyone, Maybe somebody could help me with an awk script. I have this input (field separator is comma ","): 547894982,M|N|J,U|Q|P,98,101,0,1,1 234900027,M|N|J,U|Q|P,98,101,0,1,1 234900023,M|N|J,U|Q|P,98,54,3,1,1 234900028,M|H|J,S|Q|P,98,101,0,1,1 234900030,M|N|J,U|F|P,98,101,0,1,1... (2 Replies)
Discussion started by: Ophiuchus
2 Replies

6. Shell Programming and Scripting

Print strings that match pattern with awk

I have a file with many lines which contain strings like .. etc. But with no rule regarding field separators or anything else. I want to print ONLY THE STRING from each line , not the entire line !!! For example from the lines : Flow on service executed with success in . Performances... (5 Replies)
Discussion started by: black_fender
5 Replies

7. Shell Programming and Scripting

Strings from one file which exactly match to the 1st column of other file and then print lines.

Hi, I have two files. 1st file has 1 column (huge file containing ~19200000 lines) and 2nd file has 2 columns (small file containing ~6000 lines). ################################# huge_file.txt a a ab b ################################## small_file.txt a 1.5 b 2.5 ab ... (4 Replies)
Discussion started by: AshwaniSharma09
4 Replies

8. Shell Programming and Scripting

exact string match ; search and print match

I am trying to match a pattern exactly in a shell script. I have tried two methods awk '/\<mpath${CURR_MP}\>/{print $1 $2}' multipath perl -ne '/\bmpath${CURR_MP}\b/ and print' /var/tmp/multipath Both these methods require that I use the escape character. I am guessing that is why... (8 Replies)
Discussion started by: bash_in_my_head
8 Replies

9. Shell Programming and Scripting

awk search column, print line

Hello. I've been banging my head against walls trying to search a comma delimited file, using awk. I'm trying to search a "column" for a specific parameter, if it matches, then I'd like to print the whole line. I've read in multiple texts: awk -F, '{ if ($4 == "string") print $0 }'... (2 Replies)
Discussion started by: Matthias03
2 Replies

10. Shell Programming and Scripting

Awk+Grep Input file needs to match a column and print the entire line

I'm having problems since few days ago, and i'm not able to make it works with a simple awk+grep script (or other way to do this). For example, i have a input file1.txt: cat inputfile1.txt 218299910417 1172051195 1172070231 1172073514 1183135117 1183135118 1183135119 1281440202 ... (3 Replies)
Discussion started by: poliver
3 Replies
Login or Register to Ask a Question