Eu costumava comm
comparar dois arquivos classificados. Cada linha desses arquivos é um número inteiro positivo. Mas os resultados mostram
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
Como ocorre o erro, mesmo que esses dois arquivos sejam classificados?
sort
comm
numeric-data
wenzi
fonte
fonte
Respostas:
comm
requer classificação lexicográfica (simplessort
), não classificação numérica (sort -n
). Por exemplo, ele deseja a seguinte ordem:Não é a seguinte ordem:
Corrija isso e o problema deve desaparecer. Para casos mais esotéricos, onde
comm
's locale pode ser diferente dosort
locale, você pode querer executarsort
ecomm
comLC_COLLATE=C
em seu ambiente de usar ordenação byte nativa.fonte
sort -n
sort
com e sem o-n
comutador e demonstram apenas com o-n
comutador você pode obter a ordem crescente correta que você reconhece que é necessária em sua própria resposta.comm
requer literalmenteLC_COLLATE
d ordenação. Basta dizer que os erros na sua resposta não são puramente cosméticos para exemplos fora do seu conjunto de testes ... ninguém pediu uma classificação numérica positiva.RESPOSTA ATUALIZADA:
PROBLEMA:
O OP está recebendo um erro sobre "o arquivo não está na ordem classificada " ao ser usado
comm
para comparar números inteiros positivos nos arquivos, não no texto. Então, estamos lidando com números não decimais.Resposta curta:
Dependendo do uso do
-n
comutador com osort
comando usado para classificar os resultados fornecidoscomm
, a ordem dos resultados retornados porcomm
pode ser muito diferente:Lexográfico : O uso do
-n
comutador com classificação resultará na ordenação de "Inteiros positivos" em uma série de números crescentes. O " erro " pode ser suprimido usandocomm
o interruptor `s--nocheck-order
Ordem de bytes : NÃO há uso do
-n switch
comsort
.LC_COLLATE
determina a ordem que pode até variar de acordo com alocale
configuração no host em que o comando é executado. Essa é a entradacomm
esperada por padrão. Um pouco mais sobre issoLC_COLLATE
pode ser encontrado aqui: Referência1 e Referência2O erro é um problema? Isso depende do que você está tentando alcançar. Como você verá nos exemplos abaixo,
comm
retorna os mesmos resultados depois de comparar os arquivos com ou semsort
a-n
opção`s, embora sua ordem varie da maneira acima, dependendo se-n switch
é usada com osort
comando. Eu mesmo prefiro resultados ordenados "lexográficos" - números que aumentam em uma série.No entanto, se você não deseja os resultados na ordem " lexográfica ", NÃO use a
-n
opção ao classificar os dados fornecidoscomm
para comparação.TESTE:
Compararemos os resultados do
comm
comando com e sem o-n
comutador. Aumentei a complexidade do meu conjunto de dados de teste de amostra por solicitação de Kusalananda:Dados de teste :
file1.txt :
file2.txt :
Interseção :
Listar apenas números comuns a ambos os arquivos
Sem
-n
interruptor:Resultados : correto, mas retornado em um pedido não classificado
Com
-n
interruptor:Resultados : correto, mas retornado em uma ordem classificada LEXOGRAPHIC . A operação foi concluída com êxito e retornou os mesmos resultados que o uso
comm
sem a-n
opção, mas em uma lista classificada.Diferença :
Liste apenas números exclusivos para cada arquivo:
Sem
-n
interruptor:Resultados : Correto - esses números são realmente exclusivos para cada arquivo respectivo.
Com
-n
interruptor:Resultados : Corretos, mesmos resultados que
comm
sem a-n
opção, mas retornam o erro sobre a ordem dos números inteiros positivos que não foram classificados nos próprios arquivos.SOLUÇÃO PARA RESULTADOS LEXOGRÁFICOS:
Use
comm
a--nocheck-order
opção `s para suprimir a mensagem de erro. Como sabemos que os números não são classificados em cada arquivo, mas os resultados retornadoscomm -n
estão corretos, o erro pode ser ignorado com segurança, suprimindo-o:Interseção :
Diferença :
CONCLUSÃO:
O erro "o arquivo não está na ordem de classificação " quando a classificação retornada de números inteiros positivos alimentados
comm
não significa que os resultados retornados usando a-n
opção comcomm
estão incorretos. De fato, usarcomm -n
retorna um arrumado correto em uma ordem classificada!Graças a @dhag, @kusalananda @ChrisDown por levantar as questões que exigiam maior expansão. Sempre feliz em revisar meu trabalho: a única maneira de melhorar é se somos constantemente pressionados e desafiados por nossos colegas.
fonte