Как найти дублирующих пользователей в двух файлах, а затем распечатать эти строки? - PullRequest
1 голос
/ 31 марта 2011

У меня есть два файла: FILE1 и FILE2: FILE1:

user1        1.1.1.1
user2        2.2.2.2
user3        3.14.14.3
user4        4.4.4.4
user5        198.222.222.222

FILE2

user1        99.22.54.214
user66       45.22.88.88
user99       44.55.66.66
user4        8.8.8.8
user39       54.54.54.54
user2        2.2.2.2

ФАЙЛ ВЫХОДА

user1        1.1.1.1
user1        99.22.54.214
user2        2.2.2.2
user4        4.4.4.4
user4        8.8.8.8

Я пробовал с циклом for, но с определенными успехами .. Кто-нибудь может написать мне код для этого? Thx!

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

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

$ sort -u file1 file2
user1        1.1.1.1
user1        99.22.54.214
user2        2.2.2.2
user3        3.14.14.3
user39       54.54.54.54
user4        4.4.4.4
user4        8.8.8.8
user5        198.222.222.222
user66       45.22.88.88
user99       44.55.66.66

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

0 голосов
/ 31 марта 2011

Обязательно сначала поместите файл большего размера, в данном случае это было file2

awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1

Подтверждение концепции

$ awk 'FNR==NR{a[$1]=$2;next}(a[$1]){if(a[$1]!=$2)print $1,$2 RS $1,a[$1];else print $1,$2}' OFS='\t' file2 file1
user1   1.1.1.1
user1   99.22.54.214
user2   2.2.2.2
user4   4.4.4.4
user4   8.8.8.8

В качестве альтернативы, вы можете использовать это, но это требует двух вызовов awk и, следовательно, не так быстро по производительности:

awk 'FNR==NR{a[$1]=$2;next}(a[$1]){print $1,$2 RS $1,a[$1]}' OFS='\t' file2 file1 | awk '!a[$0]++'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...