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:
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:
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:
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:
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:
$ 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.