Je cherche un moyen sous Unix de diviser un fichier en deux fichiers à un numéro de ligne donné.
split -l 100 file_name
est proche de ce que je recherche, mais cette commande crée plusieurs fichiers, chacun de 100 lignes. Je recherche une commande pour diviser un fichier en deux fichiers à un numéro de ligne donné. Existe-t-il un moyen de le faire sous Unix?
wc
avant et le fichier d'entrée n'est toujours traité qu'une seule fois, comme avec laawk
solution.head
plus de 100 lignes soient lues afin de trouver les 100 premières lignes vers lesquelles sortirf1.txt
; ces octets supplémentaires ne seront pas vus parcat
.Utilisez
awk
, de sorte que vous devez effectuer un seul passage dans le fichier d'entrée. Ce qui suit suppose que vous voulez les 122 premières lignes dans le premier fichier et les autres dans le second.la source
Vous pouvez utiliser
head
ettail
pour obtenir les deux parties:où
K
est le numéro de ligne et leL
nombre de lignes à partir du bas (nombre total de lignes -K
).(vous pouvez obtenir le nombre total de lignes en utilisant
wc -l file_name
).la source
Vous pouvez utiliser
csplit
(si disponible) pour le faire:divisera le fichier en deux morceaux, un morceau jusqu'au numéro de ligne (et y compris)
N
et l'autre morceau du numéro de ligneN+1
jusqu'à la dernière ligne.Si vous souhaitez diviser (mais sans inclure) le numéro de ligne
N
:la source
csplit
est optimisé pour ce travail.Les deux
head
ettail
ont des options pour produire des lignes à partir de "l'autre" fin du fichier que ce ne serait le cas autrement. Vous avez donc ces deux options:ou (où NNN est inférieur de 100 à la sortie de
wc -l source.txt
):Vous pouvez lire les pages de manuel de vos versions de
head
ettail
pour plus d'informations.la source
Vous pouvez utiliser «wc», «dc», «head» et «tail». C'est à dire
Pour faciliter l'utilisation, vous pouvez transformer ci-dessus en un script shell.
la source