2014-11-06 65 views
0

如果条件为真,我需要能够输出记录。根据bash脚本中的匹配条件从现有文件输出记录

假设这是现行文件,

RECORD_ID,姓,名,电话号码

我试图输出记录,如果最后的名称相匹配。我收集用户输入以获取姓氏,然后执行以下操作。

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

此脚本输出敌不过每个记录contact_records.txt

回答

0

你的脚本有两个问题:

首先,$姓氏不被认为是引述“AWK”的情况下。例如,如果要查询“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 
+0

非常感谢你。这很有意义 – user3521205 2014-11-06 04:45:08

+0

事实上,扩展shell变量作为awk命令行的一部分是很危险的。请按照[此链接](http://cfajohnson.com/shell/cus-faq-2.html#Q24)了解详情。 – 2014-11-07 02:52:56