Seu cut está efetivamente removendo as informações que você está procurando da entrada que você alimentou para grep . Use apenas
grep "^[^,]*$fruit[^,]*" information.txt
em vez de
cut -d\, -f1 information.txt | grep $fruit
e
grep "^[^,]*,$quantity$" information.txt
em vez de
cut -d\, -f2 information.txt | grep $quantity
para filtrar as linhas de seu interesse. O regexp:
-
^inicia a correspondência no início da linha; -
[^,]*corresponde a qualquer sequência que não contenha uma vírgula (,); -
$fruitcorresponde à string contida na variável de ambientefruit; -
o outro
[^,]*deve ser óbvio neste momento.
Depois de adicionar mais campos aos seus dados, talvez seja necessário modificar os regexps - nesse caso, qualquer tutorial sobre eles será útil, a sintaxe está na página grep(1) man (ou seja, use: man grep ).
Se você insistir em usar cut e sua entrada estiver classificada, poderá colocar as informações novamente usando join (para o primeiro caso):
inf=information.txt
cut -d, -f1 $inf | grep "$fruit" | sort -u | join -t, -j 1 - $inf
-
cutgera o primeiro campo (-f1) do arquivo cujo nome está contido na variável de ambienteinf, onde os campos são delimitados por uma vírgula (-d,); -
grepveja acima; -
sortclassifica e remove as duplicatas (-u); -
joinune linhas de sua entrada padrão (o-no próximo ao último argumento) com o conteúdo do arquivo fornecido como o último argumento. Ele usa uma vírgula como um separador de campo (-t,) e une linhas cujos primeiros campos são idênticos (-j 1).
O requisito de ter dados classificados vem de join (pelo menos aquele no pacote coreutils) - Eu não verifiquei como grandes problemas você poderia encontrar dados não classificados.