Cześć,
potrzebuję z plliku dsv wyciąć określoną liczbę linii. Czy ktoś wie jak to zrobić?
Z góry dziękuje za pomoc.
Cześć,
potrzebuję z plliku dsv wyciąć określoną liczbę linii. Czy ktoś wie jak to zrobić?
Z góry dziękuje za pomoc.
Podpowiedź:
DSV - delimiter-separated values
CSV - comma-separated values
Jak powiesz mi jaki język, to może nawet coś więcej pomogę
@Dregorio: Może wyjaśnię, mam bazę danych (611 MB) i potrzebuję tylko cześć linii z tego pliku. Więc chciałam je wyciąć i zapisać do innego pliku, aby móc z je wpisać do bazy danych.
W systemach uniksowych (Linux, BSD itp) jest polecenie wc
. Służy ono to liczenia różnych rzeczy w pliku: słów, linii itp. Przykład
wc -l plik.csv
Powyższe polecenie policzy liczbę wierszy na podstawie znaków końca linii.
https://pl.wikipedia.org/wiki/Wc_(Unix)
https://linux.die.net/man/1/wc
To możesz zrobić sobie skrypt w pythonie (wydaje mi się, że najprościej będzie). Jest biblioteka pandas, w której masz funkcję read_csv("filename", sep="\|\*\|")
dostajesz obiekt, którym możesz manipulować, więc sobie usuń co tam chcesz, policz co chcesz i zapisz jako nowy plik.
EDIT: wcześniej nie doczytałem treści wątku i nie załapałem, że mowa o wybraniu konkretnych linii a nie o liczeniu. Poprawiłem ten post i teraz skrypt powinien spełniać załozenia
#!/usr/bin/perl
use strict;
use warnings;
my $inputFile = "postacie z bajek.txt";
my $outputFile = "muminki.txt";
open(INPUT_FILE, "< $inputFile") or die "can't open $inputFile: $!";
open(OUTPUT_FILE, "> $outputFile") or die "can't open $outputFile: $!";
my $matchedLines = 0;
my $allLines = 0;
my $line;
for $line (<INPUT_FILE>) {
if ($line =~ /muminek/) {
$matchedLines++;
#zrób coś z linią a potem zapisz
print OUTPUT_FILE $line;
}
$allLines++;
}
close OUTPUT_FILE;
print "Matched lines $matchedLines / $allLines\n";
Skrypt dla przykładowego pliku poniżej dopasuje trzy linie:
muminek
tata muminka
babcia muminka
ryjek
papa smerf
smerfetka
muminek ma kota
muminek ma psa
Koloratka
reksio
szynka reksia
Uwaga
Tego typu skrypty nie biorą pod uwagę tego, że w komórce pliku CSV może wystąpić znak końca linii. Zgodnie z dobrą praktyką ów znak końca linii jest używany do oddzielania wierzy i nie powinien występować w miejscach innych, niż koniec wiersza.
K Fake napisał(a):
potrzebuję z plliku dsv wyciąć określoną liczbę linii. Czy ktoś wie jak to zrobić?
sed -n "40,50p" plik_a > plik_b
Powyższa instrukcja pisze do plik_b wiersze od 40 do 50 z plik_a