2013-11-25 4 views
0

Я пытаюсь добавить идентификаторы в файл. Файл выглядит следующим образом:Пока цикл не повторяется через файл

field1:field2:field3:field4 

Я хочу, чтобы проверить, если второе поле уже существует (выход сообщение пользователя) или, если он не (добавить его в файл, как только я получаю больше информации из пользователь). Я написал цикл, чтобы выполнить это, но всякий раз, когда я запускаю эту часть скрипта, он просто лагов и никогда не выполняет. Я думаю, проблема в том, что мой цикл while не фиксирует каждую строку правильно.

40 checkID() 
41 { 
42 
43  local input 
44  local line 
45  while : ; do 
46   read -p "Enter id (or ENTER to quit):" input 
47   [ -z "$input" ] && return 1 
48   while read line; do 
49     if ! grep -q "$(cut -d: -f2)" "$file"; then 
50       echo "$input" 
51     else  
52       error "id '$input' already exists in the file" 
53     fi 
54   done 
55  done 
56 } 
+3

** ** ** ** указывает на то, что он ** нуждается в ** вводе от stdin. Вы пытались что-то ввести? @Whoppa – akawhy

ответ

0

Вы не хотите while read петли там вообще, и вы хотите cut прочитать из файла, а не пользователя.

Чтобы найти что-то во втором столбце файла, вы можете использовать

if cut -d: -f2 "$file" | grep -q "$input" 
then 
    echo "Found it" 
fi 

Также обратите внимание, что это совпадение подстроки, поэтому, если вход «Foo», это будет соответствовать файл, где второе поле «грузовик для грузовых автомобилей»

+0

Я хочу проверить второе поле каждой строки. У меня есть идентификатор, хранящийся во втором поле каждой строки. Другие поля хранят информацию, соответствующую этому идентификатору. Вот почему я использовал цикл while. – Whoppa

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