1 (09.06.2012 20:17:47 отредактировано valet)

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

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

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

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

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

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

2

Не знаю, правильно ли я вас понял, но...

 Консоль:

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

Был, был и весь вышел...

3

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

4

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

5 (11.06.2012 03:22:43 отредактировано valet)

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

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


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

6

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

95% процентов проблем находятся между клавиатурой и стулом.

7

cat -A used_accs.txt
modistonev2010@list.ru^M$
dounarax2011@mail.ru^M$
mirinc2010@bk.ru^M$
dairimg2011@mail.ru^M$
pureml1985@bk.ru^M$
meztiwoodg2011@inbox.ru^M$
fearlesstiust1989@inbox.ru^M$

cat -A 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$

8 (11.06.2012 04:54:55 отредактировано Fat-Zer)

valet пишет:

cat -A used_accs.txt

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

95% процентов проблем находятся между клавиатурой и стулом.

9

Fat-Zer пишет:
valet пишет:

cat -A used_accs.txt

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

Да, спасибо. Так работает. Файл действительно виндовый, он создается виндовой прогой, вот она и ставит эти окончания.