Bash 使用awk在列内搜索

Bash 使用awk在列内搜索,bash,unix,awk,scripting,multiple-columns,Bash,Unix,Awk,Scripting,Multiple Columns,我正在通过bash脚本制作一个联系人系统。我在其中输入联系人的文本文件如下所示: Sally May,may@yahoo.com,344-555-4930,Friend Bill,Bill@yahoo.com,344-555-6543,Co-Worker 在提供的搜索选项中,我询问(在他们选择列之后): 从这里开始,我想使用变量$search遍历第一列,并以格式化的方式给我这些行。例如: 如果他们输入(账单),那么它应该返回 Name Email

我正在通过bash脚本制作一个联系人系统。我在其中输入联系人的文本文件如下所示:

Sally May,may@yahoo.com,344-555-4930,Friend
Bill,Bill@yahoo.com,344-555-6543,Co-Worker
在提供的搜索选项中,我询问(在他们选择列之后):

从这里开始,我想使用变量$search遍历第一列,并以格式化的方式给我这些行。例如:

如果他们输入(账单),那么它应该返回

Name                      Email                     Phone             Category         
Bill                      Bill@yahoo.com            344-555-6543      Co-Worker
Name                      Email                     Phone             Category         
Bill                      Bill@yahoo.com            344-555-6543      Co-Worker
Sally May                 may@yahoo.com             344-555-4930      Friend
如果他们输入(ll),那么它应该返回

Name                      Email                     Phone             Category         
Bill                      Bill@yahoo.com            344-555-6543      Co-Worker
Name                      Email                     Phone             Category         
Bill                      Bill@yahoo.com            344-555-6543      Co-Worker
Sally May                 may@yahoo.com             344-555-4930      Friend
到目前为止,我一直在编写的代码是:

awk -F, '{ if ($1 ~/$search/) print $0 }' contacts.txt | awk -F, 'BEGIN{printf "%-25s %-25s %-25s %-25s\n","Name","Email","Phone","Category"} {printf "%-25s %-25s %-25s %-25\n",$1,$2,$3,$4}' ;;

当我运行它时,它给了我一个错误。谁能帮我修一下这个!非常感谢

您需要使用
-v
选项将变量传递给awk,并且需要简化格式:

s='ll'
awk -F, -v s="$s" '$0 ~ s{$1=$1; print}' file | column -t
Sally  May             may@yahoo.com  344-555-4930  Friend
Bill   Bill@yahoo.com  344-555-6543   Co-Worker

s='Bill'
awk -F, -v s="$s" '$0 ~ s{$1=$1; print}' file | column -t
Bill   Bill@yahoo.com  344-555-6543   Co-Worker