0

itemId、itemName、itemQuantityの詳細を含むテキストファイルdetails.txtがあります

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

まず、ユーザーに商品名を入力するように要求します。入力された商品名がテキスト ファイルにある商品名と一致する場合、その商品の数量が出力されます。

例 品名を入力: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
4

2 に答える 2

0

「フィールドセパレーター」をコンマに設定する必要があります。この場合、2 番目のフィールドの内容全体を表示しているため、awkやり過ぎです。あなたが使用することができます

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

を使用する場合はawk、一致する行のみを出力する必要があります。

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

この場合、 の値$itemnameが に渡されるように二重引用符を使用する必要があることに注意してください。引数を に渡す前にシェルによって解釈されないようにawk、 をエスケープする必要があります。私は固執します。:-)\$3awkcut

次のような構文を使用して、出力を変数として保存できます。var=$(command)

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

問題はコードにあり、ファイルにアイテムが含まれているかどうかをgrep テストawkし、すべてのアイテムの数量を順番に出力しますが、これはもちろん正しくありません。

したがって、それを行う1つの方法は、再度grepすることです

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