obtém parte da linha e acrescenta à mesma linha

1

Eu tenho um arquivo com 19k linhas como estas:

a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2

No entanto, gostaria de acrescentar o nome do módulo no final da linha. Então o resultado seria:

a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1  membership
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2  invoices

Existe uma maneira de fazer isso com, por exemplo, sed ou algo semelhante? De preferência sem um arquivo extra, usando -i .

O nome do módulo sempre estaria no caminho neste formato: modules/MODULENAME

    
por Sergeant 20.08.2018 / 22:17

3 respostas

2

com sed, pegue o próximo campo separado por barras e coloque-o no final:

sed -r 's,modules/([^/]*)/.*,&  ,' file
    
por 20.08.2018 / 22:26
3

awk solution.

$ awk -F/ '{print $0"  "$3}' file
a96abbb5da0985983e113a9a7484c063  management/modules/membership/file1  membership
d7f7dd7e3ede3e323fc0e09381f16caf  management/modules/invoices/path/file2  invoices
$

Se estiver usando o gnu awk, você pode usar o recurso inplace, em vez de ter que enviar para um segundo arquivo. por exemplo. awk -i inplace -F/ '{print $0" "$3}' file

    
por 20.08.2018 / 22:37
0

Tente

sed -i 'h; s#^.*modules/# #; s#/.*$##; H; x; s#\n##;' file
    
por 20.08.2018 / 22:32