Estou tendo dificuldade em fazer algo bastante simples. Tenho cerca de 2.000 arquivos .txt compostos por uma única linha de dígitos. Gostaria de dobrar a linha única em uma coluna com muitas linhas, usando o comando fold e substituir o arquivo original por esta nova versão dobrada. Minha tentativa:
#!/bin/bash
for i in *.txt ; do
fold -w 1 $file > $file
done
Não funciona. Ajuda? Obrigado.
Responder1
Existem dois problemas aqui. Primeiro, você está declarando a variável "i", mas usando "$file" que não existe. Mesmo que existisse, o segundo problema é que o bash lê "da esquerda para a direita". Isso significa que primeiro verá ">$file" e substituirá 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 :)
Tente algo como:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
Responder2
sed
também pode ser uma opção, ele lida com o problema do arquivo temporário internamente:
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done