Um arquivo como este: ExampleFile.txt
line1TextHere
line2TextHere
line3TextHere
Gostaria de ler uma linha por uma do arquivo e enviá-la para arquivos diferentes, para que haja um arquivo para cada linha do texto. Veja o que acontece com estes:
# cat file1.txt
line1TextHere
# cat file2.txt
line2TextHere
# cat file3.txt
line3TextHere
até agora eu sei, se eu quiser ler a linha 2 do arquivo de exemplo, posso fazer
# awk 'NR==2 {print $0}' ExampleFile.txt
Acho que devo usar o loop para ler o arquivo três vezes e enviá-lo para três arquivos diferentes, mas não tenho certeza de como fazer isso. Eu uso Debian. Obrigado.
Imprimiria uma linha
n
no arquivofilen.txt
para cada linha deExampleFile.txt
.A propósito, observe que essa
$0
é a coisa padrão queprint
imprime e{print}
é a ação padrão, então vocêawk 'NR==2 {print $0}'
poderia escrever apenasawk NR==2
.Usar
tail -n +2 | head -n 1
ferramentas mais especializadas tornaria o processo mais eficiente.Você não gostaria de executar uma instância de
head
e uma instância detail
para cada linha da entrada; executar umaawk
nesse caso se torna muito mais eficiente, mas, novamente, usar uma ferramenta mais especializada, como na abordagem GNU de Ed,split
provavelmente seria mais eficiente.Eu provavelmente usaria
awk
como na resposta de Stéphane Chazelas , mas você pode usar alternativamentesplit
(assumindo aqui a implementação GNU dosplit
que é encontrado no seu sistema Debian para suas extensões--additional-suffix
e sobre o padrão ):--numeric-suffixes
Observe, porém, que você precisa especificar espaço suficiente nos nomes dos arquivos de saída para tantos dígitos quanto linhas houver no arquivo de entrada (portanto, o acima
-a 4
permitirá até9999
linhas de arquivos de saída/arquivos de entrada), caso contrário, você obterá umsplit: output file suffixes exhausted
erro.