I am having trouble getting a regular expression that will search for an input term in the specified column. If the term is found in that column, then it needs to output that whole line. These are my variables:
JavaScript
x
sreg = search word #Example: Adam
file = text file #Example: Contacts.txt
sfield = column number #Example: 1
the text file is in this format with a space being the field seperator, with many contact entries:
JavaScript
First Last Email Phone Category
Adam aster junfmr@ 8473847548 word
Jeff Williams 43wadsfddf@ 940342221995 friend
JOhn smart qwer@qwer 999999393 enemy
yooun yeall adada 111223123 other
zefir sentr jjdirutk@jd 8847394578 other
I’ve tried with no success:
JavaScript
grep "$sreg" "$file" | cut -d " " -f"$sfield"-"$sfield"
awk -F, '{ if ($sreg == $sfield) print $0 }' "$file"
awk -v s="$sreg" -v c="$sfield" '$c == s { print $0 }' "$file"
Thanks for any help!
Advertisement
Answer
awk
may be the best solution for this:
JavaScript
awk -v field="$field" -v name="$name" '$field==name' "$file"
This checks if the field number $field
has the value $name
. If so, awk
automatically prints the full line that contains it.
For example:
JavaScript
$ field=1
$ name="Adam"
$ file="your_file"
$ awk -v field="$field" -v name="$name" '$field==name' "$file"
Adam aster junfmr@ 8473847548 word
As you can see, we give the parameters using -v var="$bash_var"
, so that you can use them inside awk
.
Also, the space is the field separator, so you don’t need to specify it since it is the default.