cygwin sed - wycinanie z pliku

0

Cześć,
potrzebuję z plliku dsv wyciąć określoną liczbę linii. Czy ktoś wie jak to zrobić?

Z góry dziękuje za pomoc.

1

Podpowiedź:
DSV - delimiter-separated values
CSV - comma-separated values

Jak powiesz mi jaki język, to może nawet coś więcej pomogę

0

@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.

1

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

2

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.

2

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.

2

@K Fake:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1