Скрипт оболочки для печати строк, который содержит добавленное пользователем слово - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть файл с именем data.txt, который содержит следующее:

1440;150;1000000;pizza;hamburger
1000;180;56124;coke;sprite;water;juice
566;40;10000;cake;pizza;coke 

Я хочу создать программу, которая запрашивает ввод от пользователя, а затем распечатывает строки, содержащие данное слово.

Например:

Если я введу кокс, он должен распечатать вторую и третью строку.Если я ввожу гамбургер, он должен распечатать только первую строку.

Вот код, который я пробовал, но он не работает.Кто-нибудь может мне помочь, пожалуйста?

echo "Enter a word"`
read word 

while read line; do
numbersinthefile=$(echo $line | cut -d';' -f4);
if [ $numbersinthefile -eq $num ]; then
echo $line;
fi
done

Ранее я забыл упомянуть, что я хочу, чтобы программа позволяла множественные входы от пользователя.Пример:

Если я наберу «спрайт пиццы», он выдаст мне первую и вторую строку.

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Это просто grep, не так ли?

read -p "Enter a word: " word
grep -F "$word" file

Добавьте -w для соответствия coke только с coke, а не с co или ok.

read -p "Enter a word: " word
grep -Fw "$word" file
0 голосов
/ 15 ноября 2018

Вот один в awk, который принимает частичные совпадения:

$ awk '
BEGIN {
    FS=";"                    # file field sep
    printf "Feed me text: "   # text for prompt
    if((getline s < "-")<=0)  # read user input
        exit                  # exit if unsuccessful
}
{
    for(i=4;i<=NF;i++)        # iterate fields from file records >= 4
        if($i~s) {            # if match (~ since there was a space in eof NR==3) 
            print
            next              # only output each matching record once
        }
}' file

Вывод

Feed me text: coke
1000;180;56124;coke;sprite;water;juice
566;40;10000;cake;pizza;coke 
0 голосов
/ 15 ноября 2018

Не могли бы вы попробовать один раз.

cat script.ksh
echo "Please enter word which you want to look for in Input_file:"
read value

awk -v val="$value" '$0 ~ val'  Input_file

После выполнения кода выше, как это будет работать.

./script.ksh
Please enter word which you want to look for in Input_file:
coke
1000;180;56124;coke;sprite;water;juice
566;40;10000;cake;pizza;coke


EDIT: Если вы хотите передать в скрипт несколько значений, то как насчет передачи их в качестве аргументов самой программе?

cat script.ksh
for var in "$@"
do
  awk -v val="$var" '$0 ~ val'  Input_file
done

Затем запустите скрипт следующим образом.

script.ksh test coke cake etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...