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.