Subbing Duplicate username с номером в конце

Здравствуйте, в настоящее время работаю над школьным проектом для моего класса Unix.

Создание пользовательского меню для добавления / создания имени пользователя с использованием имени + фамилии для создания имени пользователя (первые инициалы + первые четыре из последних)

Пример. Джон Смит = JSMIT

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

Пример. Джеймс Смит = JSMIT1

, пока это то, что у меня есть, я знаю, что мне нужно использовать функцию substr в awk , но я не уверен, как точно.

Я ценю любую помощь, спасибо.

     looptest=y
while [ "$looptest" = y ]
do
        echo -n "Enter Name: "; read name
        echo -n "Enter Last Name "; read last
        echo -n "Continue(y)es or (n)o "; read looptest
        user="${name:0:1}""${last:0:4}"
        echo "$name:$last:$user" >> userData
        done
1
задан 11 December 2017 в 00:31

1 ответ

Один из возможных подходов с использованием grep

Из вашего кода я вижу, что вы добавляете файл userData, что означает, что имена файлов будут увеличиваться в числовом суффиксе. Таким образом, чтобы получить следующий доступный суффикс, мы могли бы просмотреть файл userData с grep и просто подсчитать количество строк, где встречается имя пользователя:

$ grep -c 'jsmit' users.txt                                                   
2

Конечно, если возвращаемое число равно 0, мы можем просто игнорируйте это, потому что это новое имя пользователя. Вот небольшой пример того, как это будет работать:

#!/bin/bash
read -p "Enter first name: " firstname
read -p "Enter lastname: " lastname
username=$(printf "%s%s" "${firstname:0:1}"  "${lastname:0:4}")

num=$( grep -c "$username"  userData )
if [ "$num" -gt 0 ]; then
    username="$username$num"
fi
echo "$username"

Тест с jsmit и jsmit1 уже в файле:

$ ./indexed_usernames.sh                                                      
Enter first name: john
Enter lastname: smith 
jsmit2

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

Другие вещи, которые следует учитывать

  • Как я понимаю, вы создаете небольшую пользовательскую базу данных в сценарии оболочки. Рассмотрим такой случай: что если бы у нас было jsmit, jsmit1 и jsmit2, но тогда мы удалили jsmit1. Это означает, что скрипт должен учитывать, какие числовые индексы действительно доступны , в противном случае, если мы слепо увеличиваем числа, это может привести к коллизии.

  • Рассмотрим прописные и строчные имена пользователей. Если я введу John Smith и john smith, должно ли это привести к столкновению? Стоит ли сначала преобразовывать все имена пользователей в строчные, а затем обрабатывать коллизии?

5
ответ дан 11 December 2017 в 00:31

Другие вопросы по тегам:

Похожие вопросы: