根据bash脚本中的匹配条件从现有文件输出记录

时间:2014-11-06 04:18:35

标签: shell

如果条件为真,我需要能够输出记录。

假设这是现有文件,

Record_ID,姓名,姓氏,电话号码

如果姓氏匹配,我正在尝试输出记录。我收集用户输入以获取姓氏,然后执行以下操作。

read last_name
cat contact_records.txt | awk -F, '{if($3=='$last_name')print "match"; else print "no match";}'

此脚本不会为contact_records.txt

中的每条记录输出匹配项

1 个答案:

答案 0 :(得分:0)

您的脚本有两个问题:

首先,在'awk'的上下文中不会将$ last_name视为引用。例如,如果要查询“John”,则将$ 3与变量John而不是字符串“John”进行比较。这可以通过添加两个双引号来修复,如下所示:

read last_name
cat contact_records.txt | awk -F, '{if($3=="'$last_name'")print "match"; else print "no match";}'

其次,它实际扫描整个contact_records.txt并为每行比较打印匹配/不匹配。例如,contact_records.txt有100行,其中包含“John”。然后,通过这个脚本查询John是否在其中,产生1个“匹配”和99个“不匹配”。这可能不是你想要的。这是一个修复:

read last_name
if [ `cat contact_records.txt | cut -d, -f 3 | grep -c "$last_name"` -eq 0 ]; then
  echo "no match"
else
  echo "match"
fi