打印文本文件中的单词-bash

时间:2013-10-27 15:36:35

标签: bash shell

我有一个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

2 个答案:

答案 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)