Pergunta

Suponha que eu tenho duas listas de números em arquivos F1, F2, cada número um por linha. Quero ver quantos números na primeira lista não estão no segundo e vice-versa. Atualmente estou usando grep -f f2 -v f1 e, em seguida, repetindo isso usando um script shell. Isso é muito lenta (tempo de quadrática dói). Existe uma maneira mais agradável de fazer isso?

Foi útil?

Solução

Eu gosto 'comm' para esse tipo de coisa. (Arquivos precisam ser ordenados.)

$ cat f1
1
2
3
$ cat f2
1
4
5
$ comm f1 f2
        1
2
3
    4
    5
$ comm -12 f1 f2
1
$ comm -23 f1 f2
2
3
$ comm -13 f1 f2
4
5
$ 

Outras dicas

Você não poderia apenas colocar cada número em uma única linha e, em seguida, diff (1) eles? Talvez seja necessário classificar as listas de antemão, embora para que funcione corretamente.

No caso especial em que um arquivo é um subconjunto do outro , o seguinte:

cat f1 f2 | sort | uniq -u

iria listar as linhas somente em o arquivo maior. E, claro, tubulação para wc -l mostrará a contagem.

No entanto, isso não é exatamente o que você descreveu.

Este one-liner serve as minhas necessidades particulares, muitas vezes, mas eu adoraria ver uma solução mais geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top