Поиск определенного значения в CSV-файле с помощью Bash - PullRequest
0 голосов
/ 16 марта 2019

У меня есть простой CSV-файл "студентов" с 5 столбцами и несколькими строками, первый столбец для имен. Я просто хочу запросить у пользователя имя и посмотреть, есть ли оно в файле csv, но оно не работает, и я не знаю почему. Также я не хочу выходить из программы, если она не найдена, я просто хочу напечатать сообщение

read -p "What is your name?: " arg1
if grep -q arg1 "$names.csv"; then
   $ printf "%s\n" "We got you!"
else
   $ printf "%s\n" "Sorry, you are not on the list!"

CSV-файл с вводом:

Name,R1, R2 , R3 , R4
James,"35,587","55,800,000,000","1,567,988","491,000,000,000"
Tom,"16,000","11,300,000,000","706,250","120,000,000,000" 
Sarah,"3,069","1,180,000,000","384,490","7,200,000,000"

1 Ответ

2 голосов
/ 16 марта 2019

Не могли бы вы попробовать следующее (поскольку OP не упомянул образцы, поэтому не смог проверить его).

cat script.ksh
read -p "What is your name?: " arg1
if grep -q "$arg1" "names.csv"
then
   printf "%s\n" "We got you!"
else
   printf "%s\n" "Sorry, you are not on the list!"
fi

Исправлена ​​проблема в коде OP:

  • Добавили $ в переменную arg1, иначе он будет обрабатывать arg1 как строку при добавлении в файл names.csv.
  • Удалено ненужное $перед printf.
  • Добавлен fi для завершения блока if, пожалуйста, смотрите страницу руководства для того же самого, каждый if должен заканчиваться fi для завершения его блока.


EDIT1: Протестировано на собственных созданных примерах:

Допустим, следующий наш Input_file.

* 1037Сценарий *

выглядит следующим образом:

cat script.ksh
read -p "What is your name?: " arg1
if grep -q "$arg1" "Input_file"
then
   printf "%s\n" "We got you!"
else
   printf "%s\n" "Sorry, you are not on the list!"
fi

Теперь, когда я запускаю следующий код, я получаю вывод.

./script.ksh
What is your name?: singh
We got you!


EDIT2: Если вы хотите сопоставить точную строку, например "singh" в любом поле csv, попробуйте выполнить следующее.

cat script.ksh
read -p "What is your name?: " arg1
if grep -q "\"$arg1\"" "file"
then
   printf "%s\n" "We got you!"
else
   printf "%s\n" "Sorry, you are not on the list!"
fi

Тестирование вышеуказанного скрипта:

./script.ksh
What is your name?: singh1
Sorry, you are not on the list!

./script.ksh
What is your name?: singh
We got you!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...