Arquivos de texto dobrados em lote com script bash

Arquivos de texto dobrados em lote com script bash

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

sedtambé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

informação relacionada