LinuxForum.Fans
Тема

Задача по grep

Автор: valet 9 сообщений 2508 просмотров
#258138

Имеется 2 файла: all_accs.txt и used_accs.txt

all_accs.txt - файл с аккаунтами в формате: login:pass
used_accs.txt - файл с использованными аккаунтами в формате: login

Нужно выбрать те аккаунты, которые еще не использовались.

Если бы формат файлов совпадал, то задача решалась бы так:

text
cat all_accs.txt | grep -vF -f used_accs.txt

Но к сожалению в соответствующих строках между файлами неполное совпадение, совпадают только логины. Подскажите, уважаемые форумчане, как выбрать строки с одного файла, которые не ищутся по неполном совпадению в другом?

#258146

Не знаю, правильно ли я вас понял, но...
[console]
lupo@gentoo-laptop /tmp % cat all_accs.txt
abc:123
bcd:234
asdf:0987
wert:7890
lupo@gentoo-laptop /tmp % cat used_accs.txt
bcd
abc
lupo@gentoo-laptop /tmp % cat all_accs.txt | grep -v -f used_accs.txt
asdf:0987
wert:7890
[/console]

#258153

Да, спасибо. Действительно работает - это я что-то напутал.

#258191

cat излишен, достаточно
$ grep -v -f used_accs.txt all_accs.txt

#258292

Это просто фантастика. Ваш пример работает, мой нет :).

cat all_accs.txt
dounarax2011@mail.ru:qnwifvryyitsbsk
peshadee2010@inbox.ru:sgmlweildpelcsi
kirimu2011@inbox.ru:wudptypekeaahsd
tygrastaffl1981@mail.ru:bgagdyupfulymjn
tonradl2011@list.ru:erfhkurxsxvwisd
burilaks2011@list.ru:xwdftijsxhbirmk

cat used_accs.txt
modistonev2010@list.ru
dounarax2011@mail.ru
mirinc2010@bk.ru
dairimg2011@mail.ru
pureml1985@bk.ru
meztiwoodg2011@inbox.ru
fearlesstiust1989@inbox.ru


Жирным выделил совпадающие.

cat all_accs.txt | grep -v -f used_accs.txt
dounarax2011@mail.ru:qnwifvryyitsbsk
peshadee2010@inbox.ru:sgmlweildpelcsi
kirimu2011@inbox.ru:wudptypekeaahsd
tygrastaffl1981@mail.ru:bgagdyupfulymjn
tonradl2011@list.ru:erfhkurxsxvwisd
burilaks2011@list.ru:xwdftijsxhbirmk

grep -v -f used_accs.txt all_accs.txt
dounarax2011@mail.ru:qnwifvryyitsbsk
peshadee2010@inbox.ru:sgmlweildpelcsi
kirimu2011@inbox.ru:wudptypekeaahsd
tygrastaffl1981@mail.ru:bgagdyupfulymjn
tonradl2011@list.ru:erfhkurxsxvwisd


Выделенная строка лишняя, этот аккаунт имеется в использованных, но тем не менее он выводится.
Что я делаю не так?

#258293

УМВР
пользуйте cat -A <file> и ищите пробелы на концах строк.

#258295
"valet" написал:
cat -A used_accs.txt

виндовый файл - в этом и проблема...
прогоните через dos2unix. ну или ещё какую-нить утилитку, которая умеет менять концы строк.
[added]
ну или как-то так:
sed 's/\r$//' used_accs.txt | grep -v -f - all_accs.txt

#258297
Fat-Zer написал:
[quote="valet"]cat -A used_accs.txt

виндовый файл - в этом и проблема...
прогоните через dos2unix. ну или ещё какую-нить утилитку, которая умеет менять концы строк.
[added]
ну или как-то так:
sed 's/\r$//' used_accs.txt | grep -v -f - all_accs.txt[/quote]
Да, спасибо. Так работает. Файл действительно виндовый, он создается виндовой прогой, вот она и ставит эти окончания.

Войдите или зарегистрируйтесь, чтобы ответить.