Assumindo que por "chave" você quer dizer "coluna", você poderia usar algo assim:
cut -f 11 -d "|" $(find . -type f -iname "*.txt") | sort | uniq -d | sed 's/\/./g' | while read duplicate; do grep -rHn "|$duplicate|" * ; done
Você provavelmente terá que alterar o conteúdo do $(find -iname)
para qualquer extensão dos seus arquivos de log (ou apenas removê-lo se os únicos arquivos no diretório forem arquivos de log. Isso localizará recursivamente todos os arquivos de log e os corresponderá.
A saída para alguns dados de teste é assim:
test_data.txt:1:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msg|Country not known
test_data.txt:5:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msg|Country not known
test_data_2.txt:2:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msgIDONTMATCH|Country not known
test_data.txt:3:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msgIDONTMATCH|Country not known
test_data_2.txt:4:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msgIlikecake|Country not known
test_data.txt:7:Error: null, Data: |862799|00318070L|EMA|EMAIL|null|20100705|2010-07-05 14:59:39.0|null|AUTO_20100705|2010\ITE854075_RECardProtectionlogi.msgIlikecake|Country not known
Onde estão todas as linhas dentro dos arquivos com o campo 11 duplicado.
Explicação do que o comando faz.
cut -f 11 -d "|"
Obtém o 11º campo (delimitado por |)
find . -type f -iname "*.txt"
considere todos os arquivos terminados em .txt no diretório atual (recursivamente)
sort | uniq -d
mostra todos os "campos 11s" duplicados
sed /\/./g'
Isso é um hack porque \
estraga o bash. Nós o substituímos por .
, que grep corresponde a qualquer caractere.
while read duplicate; do grep -rHn "|$duplicate|" *; done
- iterar sobre a lista de duplicatas e localizar todas as ocorrências delas, gerando o nome do arquivo e os números de linha de onde ocorreram duplicatas.