Mam ogromny plik tekstowy, o wiele za duży, aby całą tę stronę zapisać w pamięci. Wszystko, co muszę zrobić z tym plikiem tekstowym, to edycja pierwszego wiersza (jest to plik CSV i muszę zmienić tytuły).
Czy istnieje prosty sposób, aby to zrobić w bash?
edlin
dla ms-dos lubed
dla Uniksa nie wydaje się mieć tego problemu, ale tylko edytory liniowe ... RAM na czasy te były rzadkie i cenne, a rozmiar pliku w gigabajtach był czymś niemożliwym do uwierzenia! ;)ed
!!! ale w tym przypadku byłoby dobrze (nie jestem pewien, czy poradzi sobie z plikiem tego rozmiaru ...)Odpowiedzi:
Możesz użyć,
less
aby zobaczyć, co chcesz edytować i użyć,sed
aby wprowadzić zmiany. W ten sposób edytujesz bez ładowania całego pliku.Innym sposobem jest podzielenie pliku, edycja i ponowne dołączenie:
źródło
Jeśli modyfikacja zmienia długość linii, cały plik musi zostać przepisany, patrz na przykład ta dyskusja na temat SO. Prawdopodobnie powinieneś rozważyć zapisanie danych w bazie danych.
Mając to na uwadze, możesz strumieniowo edytować plik za pomocą sed. Aby zastąpić pierwszy wiersz, wykonaj coś takiego (GNU sed):
źródło