renomeando arquivos diversos

1

Eu armazeno arquivos com o seguinte nome: word-word2-word3-word4.txt. O número de "palavras" varia de arquivo para arquivo.

Quero substituir alguns dos traços por vantagens, por exemplo, palavra + palavra2-palavra3 + palavra4.txt

Eu quero especificar os traços ou sinais de menos para alterar digitando números.

Eu tenho um script estranho que não funciona - ele faz isso:

    Traços
  • são complementados com um ponto e vírgula para posterior divisão do awk fins
  • o usuário digita em números especificando traços para substituir
  • números são anexados ao final do nome do arquivo, por exemplo, aaa-; bbb-; ccc.txt 1 3
  • e canalizado para o awk para processamento
  • no awk, faça um array dos números anexados,
  • e uma matriz das palavras com uma divisão no primeiro campo
  • depois gsub ';' para '+' no array dividido usando o array numérico para especifique o índice

Aqui está o meu script horrível que codifica o nome do arquivo com o propósito de brincar e testar rapidamente. Eu não consigo pensar em como sair do script awk utilmente. O plano é sair do awk e fazer uma substituição final no sed.

Estou ciente de que este é um jantar de cães com um roteiro mostrando muita falta de aprendizado. No entanto, por favor, ofereça qualquer ajuda se você estiver disposto a fazê-lo.

file='wot-;wit-;wet-;wat.txt'; 
echo -n "type digits"; 
read nos; varr=$(echo $nos); 
newfile=$(echo $file $varr); 
echo "$newfile" | awk '{ for (i=2; i<=NF ;i++) arr[i]=$i}
                         END{ split($1,spl,"-");
                              for( var in arr ) gsub(";","+", spl[var]); 
                              print THIS IS NOT WORKING - CAN'T GET ANYTHING USEFUL OUT }'
    
por Tom 20.11.2012 / 12:55

1 resposta

1

Não tenho ideia sobre awk , no entanto, conheço o caminho com shell + sed :

file='wot-;wit-;wet-;wat.txt'; 
echo -n "type digits : "; 
read nos; 
# this is used to sort numbers in order, otherwise the script
# will work only when user specifies numbers in right order
# also we delete all non-numbers string to make sed code safe enough
nos="$(echo $nos|tr ' ' '\n'|sort -n|grep -v '[^0-9]'|tr '\n' ' ')"
# here we build sed code and modify the text
echo "$file" | { for i in $nos ; do A="s/-/+/$i;$A" ; done ; sed "$A" ; }
    
por 20.11.2012 / 14:31

Tags