Часть ответа заключается в том, чтобы хранить индекс имен пользователей, которые вы проверяете в своих правилах безопасности:
app : {
users: {
"some-user-uid": {
email: "test@test.com"
username: "myname"
}
},
usernames: {
"myname": "some-user-uid"
}
}
Таким образом узел usernames
сопоставляет имя пользователя с uid. Он по существу читает, что «имя пользователя« myname »принадлежит« some-user-uid ».
С помощью этой структуры данных ваши правила безопасности могут проверить, есть ли уже запись для данного имени пользователя:
"users": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {
".validate": "
!root.child('usernames').child(newData.val()).exists() ||
root.child('usernames').child(newData.val()).val() == $uid"
}
}
}
Это подтверждает, что имя пользователя еще не заявлено кем-либо еще, или оно заявлено текущим пользователем.
Во-первых, ср. эта страница , чтобы объяснить, почему не использовать
for i in `cat list1.txt`
... когда-либо.
Во-вторых, это , почему бы не использовать
cat list2.txt | awk ...
Извините за арфу. Теперь ... попробуйте
while read -r val || [[ -n "$val" ]]
do awk "/$val/ { flag=1; next } /Flag2/ { flag=0 } flag" list2.txt
done < list1.txt
awk
в двойных кавычках ... не идеально. Или, как предлагает Чарльз, используйте -v (всегда слушайте Charles & amp ... Ed ...)
while read -r val || [[ -n "$val" ]]
do awk -v i="$val" '
[113] ~ i { flag=1; next }
/Flag2/ { flag=0; }
flag
' list2.txt
done < list1.txt
Все еще ожидая выборки файлов. Пожалуйста, , взгляните на формат этих файлов, чтобы я мог запустить действительный тест.
Обратите внимание, что || [[ -n "$val" ]]
необходимо только в том случае, если есть вероятность, что в последней записи не будет перевода строки.