What if file 2 has characters after each of those symbols? I want to do the same but keep the trailing characters.
OK, faça uma cópia de file2
que tenha apenas o campo que você deseja filtrar.
E, se o atual file2
tiver o "símbolo não exclusivo" imediatamente seguido
pelos "caracteres finais" (por exemplo, efr-42
, rte-17
, etc.),
faça outra cópia de file2
onde eles estão separados por espaços.
Aqui estão exemplos de comandos com base nos dados de exemplo que você forneceu:
sed 's/\(...\).*//' file2.sorted > file2.symbol_only
sed 's/\(...\)\(.*\)/ /' file2.sorted > file2.separated
ou
sed 's/\([^-]*\)-.*//' file2.sorted > file2.symbol_only
sed 's/\([^-]*\)\(-.*\)/ /' file2.sorted > file2.separated
… com base nos novos dados que você adicionou à sua pergunta.
Em seguida, use comm
como antes:
comm -13 file1.sorted file2.symbol_only > file2.no_match
… e junte os símbolos aos caracteres finais:
join file2.no_match file2.separated
Se necessário, use outro sed
para remover os espaços adicionados.
Ocorreu que você poderia criar esse truque para recuperar o arquivo de saída para o pedido original de file2
.
- Produza uma cópia do original
file2
com números de linha. - Embaralhe os números de linha à direita dos símbolos.
- (acima, começando com os comandos
sort
) - Classifique a saída no número da linha original.
- Exclua os números das linhas.
Deixe-me saber se você precisar de ajuda com isso.