获取将在指定列中搜索输入项的正则表达式时遇到问题。如果在该列中找到术语,则需要输出整行。
这些是我的变量:
sreg = search word #Example: Adam
file = text file #Example: Contacts.txt
sfield = column number #Example: 1
文本文件采用这种格式,空格是字段分隔符,有许多联系人条目:
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
我试过但没有成功:
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"
谢谢你的帮助!
最佳答案
awk
可能是最好的解决方案:
awk -v field="$field" -v name="$name" '$field==name' "$file"
这将检查字段号
$field
是否具有值$name
。如果是这样,awk
会自动打印包含它的整行。例如:
$ field=1
$ name="Adam"
$ file="your_file"
$ awk -v field="$field" -v name="$name" '$field==name' "$file"
Adam aster junfmr@ 8473847548 word
如您所见,我们使用
-v var="$bash_var"
提供参数,以便您可以在awk
中使用它们。另外,空格是字段分隔符,因此不需要指定它,因为它是默认值。