Karthick S
Karthick S

Reputation: 3304

Unable to match regex in string using awk

I am trying to fetch the lines in which the second part of the line contains a pattern from the first part of the line.

$ cat file.txt
String1 is a big string|big
$ awk -F'|' ' { if ($2 ~ /$1/) { print $0 } } ' file.txt 

But it is not working.

I am not able to find out what is the mistake here.

Can someone please help?

Upvotes: 0

Views: 183

Answers (3)

Ed Morton
Ed Morton

Reputation: 203209

There are surprisingly many things wrong with your command line:

1) You aren't using the awk condition/action syntax but instead needlessly embedding a condition within an action,
2) You aren't using the default awk action but instead needlessly hand-coding a print $0.
3) You have your RE operands reversed.
4) You are using RE comparison but it looks like you really want to match strings.

You can fix the first 3 of the above by modifying your command to:

awk -F'|' '$1~$2' file.txt

but I think what you really want is "4" which would mean you need to do this instead:

awk -F'|' 'index($1,$2)' file.txt

Upvotes: 0

Vijay
Vijay

Reputation: 67211

I guess what you meant is part of the string in the first part should be a part of the 2nd part.if this is what you want! then,

awk -F'|' '{n=split($1,a,' ');for(i=1,i<=n;i++){if($2~/a[i]/)print $0}}' your_file

Upvotes: 0

Kevin
Kevin

Reputation: 56059

Two things: No slashes, and your numbers are backwards.

awk -F\| '$1~$2' file.txt

Upvotes: 2

Related Questions