获取将在指定列中搜索输入项的正则表达式时遇到问题。如果在该列中找到术语,则需要输出整行。
这些是我的变量:

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中使用它们。
另外,空格是字段分隔符,因此不需要指定它,因为它是默认值。

10-01 15:10
查看更多