Polecenie w linuxie

QE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Mam problem a mianowicie plik z baza mający 7 milionów rekordów. Pobierając go potrzebuje mieć dane z zadanego przedziału np (180000:360000) nie mam pojęcia co wpisać w poleceniach head i tail

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
1

Co to za plik? Co to za baza? Zgaduje że to zwykły plik tekstowy i każdy wiersz to jeden rekord? Jak w CSV lub JSON Lines?

  • head -n N wyświetla N pierwszych linii
  • tail -n N wyświetla N ostatnich linii

Więc można dla 180000:360000 można próbować head -n 360000 baza.csv | tail -n 180000 > wycinek.csv
Oczywiście zakładam że nie ma żadnych nagłówków i innych metadanych, a dane są w postaci tekstowej i każdy rekord zawiera się w jednej linii

ElGato
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
4

sed -n '180000, 360000p' nazwa_pliku > nowa_nazwa_pliku_z_wycinkiem_danych

elwis
  • Rejestracja: dni
  • Ostatnio: dni
1

Można też to zrobić w AWK:

Kopiuj
awk 'NR >= 180000 && NR < 360000 {print;}' plik.dat

A tak poza tym, jeśli często masz takie operacje robić to zastanowiłbym się nad zastosowaniem bazy danych. :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.