Agrupando recursivamente links simbólicos por arquivo original

4

Perdoe-me, mas na verdade não sei por onde começar - vou atualizar se for mais longe. Desculpa. Basicamente, eu tenho uma lista em um arquivo de texto similar em estrutura ao seguinte:

symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/setenforce");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/setsebool");
symlink("mksh", "/system/bin/sh");

O que eu quero fazer é alterá-los, usando um script Bash, para ser como o seguinte:

symlink("toolbox", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole", "/system/bin/setenforce", "/system/bin/setprop", "/system/bin/setsebool")
symlink("mksh", "/system/bin/sh");

Isso significa agrupar as linhas e mesclá-las com base no arquivo original, neste caso, toolbox .

Atualmente, estou apenas classificando o arquivo pelo nome, mas isso não é satisfatório, claro! Alguém pode me apontar na direção certa?

Obrigado!

    
por Forest 09.08.2015 / 20:08

1 resposta

5

awk é adequado para essas tarefas de agrupamento, por exemplo:

$ awk -F'"' ' { a[$2]=a[$2] ", \""$4"\"" } 
        END { for(i in a) printf("symlink(\"%s\"%s);\n", i, a[i]); }' input

A saída do seu exemplo:

symlink("toolbox", "/system/bin/schedtop", "/system/bin/sendevent",
                   "/system/bin/setconsole", "/system/bin/setenforce", 
                   "/system/bin/setprop", "/system/bin/setsebool");
symlink("mksh", "/system/bin/sh");

(quebras de linha adicionadas para melhor layout)

Em que -F'"' instrui awk a interpretar o caracter de aspas duplas como delimitador de campo. $2 etc. referencia o campo 2nd etc., para cada linha é adicionada uma entrada / modificada para a matriz associativa a . A ação END itera sobre cada chave da matriz associativa e imprime bem os grupos.

    
por 09.08.2015 / 20:23