2015-01-13 2 views
0

я получил этот код, ниже которого является отображение полей на основе пользовательского ввода, и программа будет захватывать другие остающиеся полю правильное отображение, что я хочу видеть этооболочки дисплей скрипт не работает

Found 2 records 
The Hunger Games, Suzanne Collins, 1, 1, 1 
The Hunger Games, Test, 1, 1, 1 

, но с текущий код ниже дисплея

Found 2 
the hunger games 
the hunger games, suzanne collins 
test, 1 
1, 1 
1, 1 
1 

на вход файла

The Hunger Games:Suzanne Collins:1:1:1 
The Hunger Games:test:1:1:1 

надежда кто-то может помочь мне в этом

echo "Enter Title: " 
read title 
echo "Enter Author: " 
read author 
result=$(grep -ise "$title\:$author" BookDB.txt) 
record=$(grep -io "$title" BookDB.txt | uniq -c) 
if [ "$result" != "" ] && [ "$author" == "" ] 
then 
echo "found: " $record "records" | awk '{print $1 $2}' 
echo "" 
title=$(echo "$result" | cut -f 1 -d ":") 
author=$(echo "$result" | cut -f 2 -d ":") 
price=$(echo "$result" | cut -f 3 -d ":") 
qty_ava=$(echo "$result" | cut -f 4 -d ":") 
qty_sold=$(echo "$result" | cut -f 5 -d ":") 
echo "" 
echo -e "$title", "$author", ""\$"$price", "$qty_ava", "$qty_sold" 

ответ

1

Ну, мой метод не совсем лучший, но запустите двойной цикл для записи, не распечатывая сначала все детали, чтобы считать запись и еще один цикл, чтобы получить детали. его не самый лучший или эффективный метод

echo "Enter Title: " 
read title_r 
echo "Enter Author: " 
read author_r 
while read -r result 
do 
title=$(echo "$result" | cut -f 1 -d ":") 
author=$(echo "$result" | cut -f 2 -d ":") 
price=$(echo "$result" | cut -f 3 -d ":") 
qty_ava=$(echo "$result" | cut -f 4 -d":") 
qty_sold=$(echo "$result" | cut -f 5 -d ":") 
if echo "$title" | grep -iq "$title_r" && echo "$author" | grep -iq "$author_r"; 
then 
let record++ 

fi 
done < ./BookDB.txt 

echo "Number of books found: " $record 
while read -r result 
do 
title=$(echo "$result" | cut -f 1 -d ":") 
author=$(echo "$result" | cut -f 2 -d ":") 
price=$(echo "$result" | cut -f 3 -d ":") 
qty_ava=$(echo "$result" | cut -f 4 -d":") 
qty_sold=$(echo "$result" | cut -f 5 -d ":") 
if echo "$title" | grep -iq "$title_r" && echo "$author" | grep -iq "$author_r"; 
then 
let record++ 
echo -e "$title,$author,"\$"$price,$qty_ava,$qty_sold"  
fi 
done < ./BookDB.txt 
#echo "Number of books found: " $record 
echo "" 
1

Вместо разреза, просто попробуйте использовать СЭД как:

sed 's/:/, /g' file.txt 

будет искать «:» и заменить все вхождения его в «»

+0

используя это изменит «:» внутри файла Я желаю, чтобы это было то же самое – Ken

+0

@Ken yesi т будет Seach для толстой кишки и заменить каждый экземпляр запятой с последующим пробелом , – SMA

Смежные вопросы