Tenho um caso parecido com este , mas tem algumas diferenças.
Lista de conteúdoA:
.co
.best.co
.com
.test.server.cloud.us-east.amazonaws.com
.com.co
.abc.com.co
.jp
.def.museum.hiroshima.jp
.net
.xyz.xxx.yyy.net
.exe
.xyz.exe
# and anything else i want to add
Lista de conteúdoB:
.bar
.co
.com
.server.cloud.us-east.amazonaws.com
.com.co
.jp
.museum.hiroshima.jp
.net
.xxx.yyy.net
# and anything else i want to add
O que eu quero é retirar da "listA", aquelas linhas que não terminam no que aparece na "listB", e duplicadas também
Saída desejada:
.best.co
.test.server.cloud.us-east.amazonaws.com
.abc.com.co
.def.museum.hiroshima.jp
.xyz.xxx.yyy.net
Eu tentei alguns comandos e não funcionou para mim:
grep -vi -f <(sed 's:^\(.*\)$:\\\1\$:' listB ) listA > out
grep -v -f <(sed 's/$/$/' listB ) listA > out
desde já, obrigado
Explicação como dois comandos:
1.)
grep -v -F -x -f listB listA
Remova duplicatas literais
listA
e use essa saída como entrada do segundo arquivogrep
. Isso deixa essas entradas delistA
:(Linhas restantes para remover:
.exe
e.xyz.exe
)2.)
grep -x -f <(sed 's/\./\\./g;s/^/.*/' listB) <(...)
Escape dos pontos
.
emlistB
, adicione.*
ao início egrep
novamente para combinar as linhas que terminam com uma linha emlistB
. A entrada é o resultado do primeirogrep
.