Divide o arquivo de texto por linha e renomeia com base no conteúdo da string

4

Eu tenho um arquivo de texto do WINDOWS que contém o seguinte em seu próprio diretório: É chamado "test.txt"

Exemplo de arquivo de origem - test.txt:

hxxp://url.xxx/XX/file 1.txt
hxxp://url.xxx/XX/file 2.avi
hxxp://url.xxx/XX/file 3.mpg

O conteúdo do primeiro arquivo seria:

hxxp://url.xxx/file 1.txt

O nome desse arquivo seria:

file 1.txt

Meu objetivo é criar arquivos de texto separados contendo cada URL e receber o nome da parte "arquivo" do URL. Então o primeiro seria "arquivo 1.txt.txt" e depois "arquivo 2.avi.avi" e assim por diante. Split faz isso perfeitamente, exceto para nomear os arquivos reais.

    
por Aaron 29.03.2017 / 20:46

1 resposta

5

Isso é feito facilmente em awk . Você só precisa definir o separador de campo como / e depois imprimir cada linha em um arquivo cujo nome é o último campo. Como o número de campos em awk é salvo na variável NF , você pode obter os últimos campos com $NF . Então, se você quer que todos tenham a extensão txt, tudo que você precisa é:

awk -F'/' '{print > $NF".txt"}' file 

Se, como parece ser o caso com base nos seus comentários, o arquivo de entrada tiver finais de linha do Windows, será necessário remover o \r primeiro:

sed 's/\r//' file | awk -F'/' '{print > $NF".txt"}' 
    
por 29.03.2017 / 20:51

Tags