Aqui está uma pura variante bash
em a solução mais geral de terdon .
while read line; do
echo "$line" >> "${line:0:4}.txt"
done < CAMS.txt
Os arquivos resultantes serão nomeados de acordo com os primeiros quatro caracteres em cada linha, por exemplo, 4153.txt
e 4801.txt
para a entrada de amostra.
O fragmento a seguir pode ser usado para renomear em lote os arquivos resultantes para CAMS1.txt
, CAMS2.txt
etc. (supondo que os primeiros quatro caracteres de cada linha na entrada original fossem de fato dígitos).
i=1
for file in [0-9][0-9][0-9][0-9].txt; do
mv "$file" "CAMS$(( i++ )).txt"
done
Isso depende da observação de que os números no arquivo de entrada original estão em ordem crescente, e a numeração dos arquivos dos arquivos de saída de amostra corresponde a essa ordenação.
Explicação:
while read line; do
...
done < CAMS.txt
Iterar o arquivo CAMS.txt
, lendo cada linha, por sua vez, na variável line
.
echo "$line" >> "${line:0:4}.txt"
Acrescenta a linha atualmente sendo processada a um arquivo, cujo nome é obtido dos quatro primeiros caracteres da linha atual.
i=1
Atribua o valor 1
à variável i
.
for file in [0-9][0-9][0-9][0-9].txt; do
...
done
Iterar arquivos no diretório atual que tenham quatro dígitos em seu nome e terminem com a extensão .txt
. O [0-9][0-9][0-9][0-9].txt
no snippet acima é chamado de shell glob . Esse recurso pode ser usado para corresponder ou expandir tipos específicos de padrões, neste caso, nomes de arquivos.
mv "$file" "CAMS$(( i++ )).txt"
Renomeie o file
atualmente sendo processado. O nome do arquivo de destino, "CAMS$(( i++ )).txt
", consiste no prefixo CAMS
concatenado com o valor atual da variável i
. A variável i
é, ao mesmo tempo, incrementada dentro de bash
expressão aritmética , conforme indicado pela sintaxe (( ... ))
, usando o operador de incremento de postfix ++
. % before $
faz com que o valor da expressão, neste caso o valor de (( ... ))
antes do incremento, seja expandido para a string indicando o nome do arquivo de destino. Por fim, o sufixo i
é anexado ao nome do arquivo de destino.