Estou procurando uma maneira no unix de dividir um arquivo em dois arquivos em um determinado número de linha.
split -l 100 file_name
está perto do que estou procurando, mas esse comando cria vários arquivos, cada um com 100 linhas. Estou procurando um comando para dividir um arquivo em dois arquivos em um determinado número de linha. Existe uma maneira de fazer isso no unix?
wc
antes e o arquivo de entrada ainda é processado apenas uma vez, como naawk
solução.head
ler mais do que apenas 100 linhas para encontrar as primeiras 100 linhas para saídaf1.txt
; esses bytes extras não serão vistos porcat
.Use
awk
, para que você precise fazer apenas uma passagem pelo arquivo de entrada. O seguinte pressupõe que você deseja as primeiras 122 linhas no primeiro arquivo e o restante no segundo.fonte
Você pode usar
head
etail
obter as duas partes:onde
K
é o número da linha eL
é o número de linhas da parte inferior (número total de linhas -K
).(você pode obter o número total de linhas usando
wc -l file_name
).fonte
Você pode usar
csplit
(se disponível) para fazer isso:dividirá o arquivo em duas partes, uma parte até (e incluindo) o número da linha
N
e a outra parte do número da linhaN+1
até a última linha.Se você deseja dividir até (mas não incluindo) o número da linha
N
:fonte
csplit
é otimizado para este trabalho.Ambos
head
etail
têm opções para produzir linhas a partir do "outro" final do arquivo, caso contrário. Então você tem essas duas opções:ou (onde NNN é 100 menor que a saída de
wc -l source.txt
):Você pode ler as páginas de manual para suas versões
head
etail
para mais informações.fonte
Você pode usar 'wc', 'dc', 'head' e 'tail'. Ou seja,
Para facilitar o uso, você pode transformar acima em um script de shell.
fonte