Como fazer isso em um único comando no Ubuntu 16.04?

3

Eu tenho um arquivo de URLs, no formato mostrado abaixo:

com.blendtuts/S
°=
com.blengineering.www/:http
±=
com.blenheimgang.www/le-porsche-museum-en-details/porsche-museum-3
²=
com.blenheimsi
³=
com.blenkov.www/page/media/18/34/376
´=
com.blentwell.www/bookmarks.php/jackroldan/sp
¸=
com.blentwell.www/tags.php/I

O tamanho do arquivo é em GigaBytes. Diga cerca de 250 GB do tamanho do arquivo.

Eu estava tentando inverter as palavras no arquivo e extrair apenas os domínios do texto. Eu tentei fazer isso usando os comandos do terminal do Ubuntu. Deixe-me dizer o que tentei:

Primeiro eu removi os dados depois de "/" usando o seguinte comando:

~$ ex -sc '%s/\(\/\).*// | x' newfile.txt > ddm.txt

E o resultado como:

com.blendtuts/
 °=
com.blengineering.www/
±=
com.blenheimgang.www/
²=
com.blenheimsi
³=
com.blenkov.www/
´=
com.blentwell.www/
¸=
com.blentwell.www/

Agora eu inverti o texto completo no arquivo usando a solução de: link

E obtivemos o seguinte resultado:

    /blendtuts.com
    °= /www.blengineering.com
    ±= /www.blenheimgang.com
    ²= blenheimsi.com
    ³= /www.blenkov.com
    µ=  /www.blentwell.com
    ¶=  /www.blentwell.com
    •=  /www.blentwell.com

/www.blentwell.com

Mas ainda assim o problema não está resolvido. Eu gostaria de como é possível extrair URLs e colocá-los em outro arquivo usando o Ubuntu. Como você pode ver acima da saída, o que ainda tenho não é o domínio, tem uma barra invertida com ele.

Se houver outra solução para esse problema usando qualquer outro sistema operacional, avise-me. Eu prefiro ir com o Ubuntu.

Eu gostaria de extrair domínios do arquivo e separá-los para outro arquivo e isso também em um formato adequado.

Se eu obtiver o domínio exclusivo, será uma excelente solução para minha consulta. Caso contrário, estou usando o comando como:

$ sort filename.txt | uniq > save_to_file.txt

Por favor, tente não me dar uma solução usando o comando awk, pois ele não funciona no meu sistema.

Dados da amostra:

com.blendschutzrollo.www/d_chefsessel6_Maxx_Chefsessel_mit_Kopfstutze_Chefdrehsessel___Munchen__374
¯= 
com.blendtuts/S
°= 
com.blengineering.www/:http
±= 
com.blenheimgang.www/le-porsche-museum-en-details/porsche-museum-3
²= 
com.blenheimsi
³= 
com.blenkov.www/page/media/18/34/376
´= 
com.blenoir.www/lat
µ= 
com.blentwell.www/bookmarks.php/bashment%20jack/re
¶= 
com.blentwell.www/bookmarks.php/djcable/rt
·= 
com.blentwell.www/bookmarks.php/jackroldan/sp
¸= 
com.blentwell.www/tags.php/I
¹= 
com.blentwell.www/tags.php/eurot
º= 
com.blentwell.www/tags.php/mitarbeiters
»= 
com.blentwell.www/tags.php/verw
¼= 
com.blenzblog/tag/olympic-w
½= 
com.blepharoplastyusa.www/albany-n
¾= 
    
por Jaffer Wilson 09.11.2016 / 05:07

2 respostas

6

Uma solução Perl, adaptando uma das soluções de reversão de string :

$ perl -F/ -anle 'print reverse(split("([^.]*)", $F[0])) if /\./' input
www.blendschutzrollo.com
blendtuts.com
www.blengineering.com
www.blenheimgang.com
blenheimsi.com
www.blenkov.com
www.blenoir.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
blenzblog.com
www.blepharoplastyusa.com

Os argumentos:

  • -F/ -a cria uma matriz F de cada linha de entrada, dividindo em / .
  • -nle executa a expressão ( -e <expr> ) em cada linha de entrada, sem imprimir automaticamente ( -n ), enquanto manipula a nova linha no final de cada linha ( -l )
  • A linha já está dividida em / e só precisamos da parte antes da primeira / , portanto, o primeiro elemento da matriz F : $F[0] . Em seguida, dividimos em . e invertemos cada uma delas e imprimimos se a linha contiver . .

Agora você pode sort -u this.

    
por muru 09.11.2016 / 05:33
1

Que tal apenas obter tudo entre 'com' & 'www'? E imprimi-los por 'sed'

sed -ne 's/com\.\(.*\)\.www\(.*\)/www..com/p' infile

Isto irá ignorar duas linhas de sua amostra de entrada que não tem 'www'.

    
por αғsнιη 09.11.2016 / 05:39