Método 1: grep & awk
Você pode usar este snippet para fazer isso:
$ grep -f <(awk -F '|' '{print $5}' file1) file2
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
Detalhes
O bit que usa awk analisa o primeiro arquivo, file1 retirando todas as 5 colunas. Esses valores são usados como uma lista para grep , que imprimirá qualquer linha no segundo arquivo que contenha uma correspondência.
Advertências com este método
Este método corresponderá a qualquer ocorrência da quinta coluna de file1 em file2 .
Método # 2: apenas awk
Outra abordagem que foi usada no site no passado é usar a instalação FNR de awk . É aqui que awk irá iterar mais de 2 arquivos, passando pelo segundo arquivo linha por linha, para cada linha no primeiro.
Uma abordagem como essa faria isso. Coloque o seguinte em um arquivo, cmds.awk :
FNR == NR {
f1[$5] = $5
next
}
{ if ($5 == f1[$5]) print $0; }
Você pode executar isso da seguinte maneira:
$ awk -F '|' -f cmds.awk file1 file2
OBSERVAÇÃO: você poderia ter usado este padrão awk :
FNR == NR {
f1[$5] = $5
next
}
{ if ($5 in f1) print $0; }
Exemplo
$ awk -F '|' -f s.awk file1 file2
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
Advertências com este método
Essa abordagem só pode manipular uma única instância de cada endereço de email de file1 . Portanto, se houver duas linhas que tenham o mesmo valor para a quinta coluna, isso não conseguirá distinguir entre elas. Isso parece aceitável, considerando suas necessidades no OP.
Participe & classificar
Você também pode fazer isso usando join e sort .
$ join -t '|' -j 5 <(sort -k5,5 file2) <(sort -k5,5 file1) | sed 's/||.*//'
Isso usará o separador | e unirá os arquivos classificados na quinta coluna. Essa abordagem imprime as correspondências de file1 e file2 , por isso usamos sed para dividir a segunda partida do final.
Exemplo
$ join -t '|' -j 5 <(sort -k5,5 file2) <(sort -k5,5 file1) | sed 's/||.*//'
[email protected]|Connect|20130320000025|UTC|PPP|[email protected]|0BCBE578