我有一个textfile details.txt 有itemId,itemName,itemQuantity
的详细信息details.txt
1,egg,20
2,meat,40
首先,我将要求用户输入项目名称,如果项目名称的输入与文本文件中找到的项目名称匹配,则会打印出项目的数量。
e.g 输入项目名称:egg
输出
Quantity
20
下面是我的,但它不起作用,因为我不知道如何实现我的预期输出。请指教谢谢
#!/bin/bash
fileName="details.txt"
read -p "Enter item name" itemName
if grep -q $itemName $fileName; then
echo "Quantity"
awk '{print $4}' $fileName
else
echo "No Record Found"
fi
我的输出
Quantity
20
40
答案 0 :(得分:0)
问题在于您的代码,grep
测试文件是否包含该项目,然后awk
打印出所有项目的数量转,这当然是不正确的。
所以一种方法就是再次grep
grep $itemName $fileName|awk '{print $4}' $fileName
答案 1 :(得分:0)
您需要将“字段分隔符”设置为逗号。在这种情况下,由于您显示的是第二个字段的全部内容,awk
是过度的;你可以用
grep $itemname $filename | cut -d, -f3
如果您想使用awk
,则只需打印匹配的行:
awk -F, "/$itemname/ { print \$3 }"
注意,在这种情况下,您需要使用双引号,因此$itemname
的值将传递给awk
,您需要转义\$3
所以在将参数传递给awk
之前,shell 不会被解释。我坚持cut
。 : - )
您可以使用语法var=$(
command
)
将输出存储为变量,如下所示:
output=$(grep $itemname $filename | cut -d, -f3)