Arquivos de texto de dobra em lote com script bash

2

Estou tendo dificuldade em fazer algo bem simples. Eu tenho cerca de 2000 arquivos .txt que são compostos por uma única linha de dígitos. Eu gostaria de dobrar a linha única em uma coluna com muitas linhas, usando o comando fold e sobrescrevendo o arquivo original com esta nova versão dobrada. Minha tentativa:

#!/bin/bash
for i in *.txt ; do
  fold -w 1 $file > $file
done

Não funciona. Socorro? Obrigado.

    
por Frank_Zafka 17.08.2012 / 17:16

2 respostas

5

Existem dois problemas aqui. Primeiro, você está declarando a variável "i", mas usando "$ file", que não existe. Mesmo se o fizesse, o segundo problema é que o bash lê "da esquerda para a direita". Isso significa que ele verá primeiro "> $ file" e sobrescreverá o conteúdo do arquivo. Portanto, se você estivesse usando as variáveis corretas, você teria perdido seus dados.

Então, um erro salvou você do outro, seu sortudo, sortudo :)

Tente algo como:

for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
    
por 17.08.2012 / 17:21
2

sed também pode ser uma opção, ele trata o problema de arquivo temporário internamente:

for i in *.txt ; do
  sed  -i 's#.#&\n#g' $file
done
    
por 17.08.2012 / 18:16