0

I have a textfile details.txt that have details of itemId,itemName,itemQuantity

details.txt
1,egg,20
2,meat,40

firstly I will request the user to input the item name and if the input of the item name matches with the item name found in text file , it will print out the quantity for the item.

e.g Enter item name:egg

output

Quantity
20

below is what I have but it's not working as I don't know how to achieve my expected output. Please advise thanks

#!/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

my output

Quantity
20
40
4

2 回答 2

0

问题出在你的代码中,grep 测试文件是否包含该项目,然后依次awk打印出所有项目的数量,这当然是不正确的。

所以一种方法是再次 grep

grep $itemName $fileName|awk '{print $4}' $fileName
于 2013-10-27T15:42:50.123 回答
0

您需要将“字段分隔符”设置为逗号。在这种情况下,由于您要显示第二个字段的全部内容,awk因此有点矫枉过正;您可以使用

grep $itemname $filename | cut -d, -f3

如果你想使用awk,你只需要打印匹配的行:

awk -F, "/$itemname/ { print \$3 }"

请注意,在这种情况下,您需要使用 use 双引号,以便将 的值$itemname传递给awk,并且您需要转义 ,\$3以便在参数传递给awk. 我会坚持cut。:-)

您可以使用如下语法将输出存储为变量:var=$(command)

output=$(grep $itemname $filename | cut -d, -f3)
于 2013-10-27T15:47:14.427 回答