So erhalten Sie die Zeilen 10 bis 100 aus einer 200-Zeilen-Datei in eine neue Datei

So erhalten Sie die Zeilen 10 bis 100 aus einer 200-Zeilen-Datei in eine neue Datei

Ich habe eine Datei mit 200 Zeilen.

Ich muss die Zeilen 10 bis 100 extrahieren und in eine neue Datei einfügen.

Wie macht man das unter Unix/Linux?

Welche Befehle könnten Sie verwenden?

Antwort1

Verwendensed:

sed -n -e '10,100p' input.txt > output.txt

sed -nbedeutetnichtStandardmäßig wird jede Zeile gedruckt. -ebedeutet, das nächste Argument als Sed-Skript auszuführen. 10,100pist ein Sed-Skript, das bedeutet, dass ab Zeile 10 bis einschließlich Zeile 100 pdiese Zeile gedruckt wird (). Anschließend wird die Ausgabe in gespeichert output.txt.

Wenn Ihre Datei länger als vorgeschlagen ist, ist diese Version (vorgeschlagen in den Kommentaren) schneller:

sed -e '1,9d;100q'

Das bedeutetlöschenZeilen 1-9,aufhörennach Zeile 100 und drucke den Rest. Bei 200 Zeilen spielt das keine Rolle, aber bei 200.000 Zeilen wird die erste Version trotzdem jede Zeile prüfen, auch wenn sie sie nie ausdrucken wird. Ich bevorzuge generell die erste Version, weil sie eindeutig ist, aber bei einer langen Datei wird dies viel schneller sein – Sie kennen Ihre Daten am besten.

Alternativ können Sie headund tailin Kombination verwenden:

tail -n +10 input.txt | head -n 91 > output.txt

Dieses Mal tail -n +10wird die gesamte Datei ab Zeile 10 und head -n 91die ersten 91 Zeilen davon (bis einschließlich Zeile 100 der Originaldatei) ausgedruckt. Die Weiterleitung erfolgt output.txtauf die gleiche Weise.

Antwort2

Das sollte reichen

tail -n +10 file.txt | head -n 91 > newfile.txt

Antwort3

Wenn Sie dies in tun würden vim, wäre es ziemlich einfach. Nehmen Sie an, Ihre Datei hat den Namen srcund die Datei, in die Sie die Zeilen verschieben möchten, ist dest. Wenn destsie noch nicht existiert, würden Sie sie erstellen:

touch dest

Öffnen Sie dann sowohl als srcauch destin vim(die -pFlagge öffnet die Argumente in Tabs):

vim -p src dest

Zur zehnten Zeile springen; alles von der 10. bis zur 100. Zeile markieren; ziehen; zur Registerkarte mit dem Zeichen „“ wechseln dest; einfügen.

10ggv101ygtp

Notiz: 101wählt den Anfang der 101. Zeile aus (fängt den \nam Ende der 100. Zeile ab).


Dies ist natürlich ein etwas komplizierterer Vorgang als die Verwendung eines Befehlszeilentools, hat aber den Vorteil, dass Sie eine visuelle Auswahl erhalten (so dass Sie sicher sein können, alles zu bekommen, was Sie wollen). Dies scheint jedoch auch ein guter Anwendungsfall für Folgendes zu sein awk:

awk 'NR==10, NR==100' src > dest

Die NRVariable ermöglicht Ihnen einen Mustervergleich mit der Anzahl der Zeilen. Der obige Befehl extrahiert also die Zeilen 10–100 aus srcund Ihre Shell leitet die Ausgabe dann an um dest.

Antwort4

Sie können es auf viele Arten tun.

Eine awkLösung:

$ awk 'NR<10{next};1;NR>100{exit}' file > new_file

Eine perlLösung:

$ perl -nle '
    print if $. > 9 and $. < 101;
    exit if $. > 100;
' file > new_file

verwandte Informationen