Bash wycinanie linii z pliku txt

0

Witam. Kod skryptu (skopiowany ze stackoverflow)

for /l %%a in (11382,1,720200) do (
more D:\odfiltrowany.txt +%%a >>C:\extracted.txt
)

I to powinno zadziałać tak:
Wejściowy plik:

coś tu jest
linia: 11382
linia : ...
linia : 7200200
coś tu jest

Wyjściowy:

coś tu jest
coś tu jest

Ale nie działa w ogóle, odpalam to dziadostwo i nic się nie dzieje a minęło już kilkanaście minut od uruchomienia. Ktoś ma jakiś pomysł ?

0

Proponuję do tego użyć seda

sed -n '11382,720200p' file >> extracted

Zauważ znak 'p' po numerze ostatniej linii.

0

Tak,
ale ja odpalam na Windowsie ...

0

Nie masz seda? To ściągnij. http://gnuwin32.sourceforge.net/packages/sed.htm, a najlepiej od razu cały pakiet gnuwin http://gnuwin32.sourceforge.net/

Tak ale na Windowsie odpalam, na windowsie będzie działać sed ?

sprawdź, 5 sekund Ci to zajmie.

[edit]
Albo ściągnij cygwina, chyba bardziej aktualny i chyba też dostarcza narzędzia gnu dla windowsa

0

Dobra, to ten skrypt nie działa prawidłowo .. Ten co wstawiłem Bo on do nowego pliku zapisuje mi te linie które wyciąłem a on miał te linie usunąć i zapisać wszystko bez nich :(

Racja, przepraszam, nie doczytałem.

sed '11382,720200d' file >> extracted

To powinno załatwić sprawę.

0

Ten sed i tak nie działa u mnie. Coś mi się Windows kraczy niby zainstalowałem tego sed-4.2.1 i te całe GetGnuWin32 i nie działa

Zapisałem skrypt w pliku bat.bat
odpalam go przez CMD:

 
C:\Windows\system32>D:\bat.bat

C:\Windows\system32>sed '11382,720200d' D:\odfiltrowany.txt  1>>extracted.txt
Nazwa 'sed' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne,
program wykonywalny lub plik wsadowy.
0

Wygląda, na to, że nie masz programu sed w "path". Gdzie zainstalowałeś pakiet gnuwin?

0

W domyslnej lokalizacji : C:\Program Files (x86)\

I tu katalog \GnuWin32

0

I dalej nie działa, mimo, że ustawiłem:
user image

0

zmienna środowisko path przyjmuje katalog, a Ty podałeś plik. Powinieneś dodać C:\Program Files (x86)\GnuWin32\bin. I nie dodawaj nowej zmiennej środowiskowej tylko edytuj zmienną PATH. Gdzieś tam musi byc.

0

Zmodyfikowałem systemowy path i dopisałem tą linię teraz wygląda to tak:

C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\GnuWin32\bin

Wcześniej wiele innych programów wpisanych było i dalej nie działa ..

0

W sumie to doczytałem jak ten bash działa w Windowsie:p

Pakiet programów gnuwin32 nie działa z bashem. Te programy działają natywnie pod Windowsem. Ty aktualnie próbujesz uruchamiać sed z cmd czyli zwykłej konsoli Windowsowej. Musisz odpalić bash.exe i tam sed musi być, bo z tego co czytałem to to zwykle ubuntu jest. Jak odpalisz tego całego bash.exe spróbuj wpisać w konsoli sed i powiedz co wyszło.

0

Nie u mnie pliku bash.exe ..

A nie da się tego co chcę zrobić na zwykłym bashu windowsowym ?

0

O matko, człowieku. Windows normalnie NIE posiada basha. Bash to wymysł uniksowy. Windows posiada konsolę cmd i ona nie ma nic wspólnego z bashem.

Jednakże sed powinien działać na normalnym cmd w pakiecie z gnuwin. Czy ta komenda działa Ci jak wejdziesz do katalogu gdzie jest sed? Tj. napierw zrób cd C:\Program Files (x86)\GnuWin32\bin, potem dir zobaczy czy jest tam sed, jak tak, to spróbuj go odpalić. Może się nazywać sed.exe, a nie sed.

0

Windows nie posiada Basha, posiada powłokę o nazwie Batch (rozwiązanie http://stackoverflow.com/a/25036352/1017941), a to są absolutnie dwie różne rzeczy. Oprócz tego nowe wersje Windowsa posiadają jeszcze powłokę o nazwie PowerShell (rozwiązanie http://stackoverflow.com/a/14353603/1017941)

0

Tak to wygląda

 
Microsoft Windows [Wersja 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\Users\admin>cd C:\Program Files (x86)\GnuWin32\bin

C:\Program Files (x86)\GnuWin32\bin>dir
 Wolumin w stacji C to SYSTEM
 Numer seryjny woluminu: 4605-8CDD

 Katalog: C:\Program Files (x86)\GnuWin32\bin

2016-07-25  13:21    <DIR>          .
2016-07-25  13:21    <DIR>          ..
2008-03-15  00:21         1 008 128 libiconv2.dll
2005-05-06  21:52           103 424 libintl3.dll
2007-10-24  12:10            79 360 regex2.dll
2010-12-27  19:10            77 824 sed.exe
               4 plik(ów)          1 268 736 bajtów
               2 katalog(ów)  34 133 917 696 bajtów wolnych

C:\Program Files (x86)\GnuWin32\bin>sed.exe
Użycie: sed.exe [OPCJE] {skrypt-tylko-wtedy-gdy-żaden-inny-skrypt} [plik-wejścio
wy]...

  -n, --quiet, --silent
                 powstrzymuje automatyczne drukowanie przetwarzanych linii.
  -e skrypt, --expression=skrypt
                 dodaje skrypt do poleceń, które mają być wykonane.
  -f plik-skryptowy, --file=plik-skryptowy
                 dodaje zawartość pliku skryptowego do poleceń,
                 które mają być wykonane.
  -i[rozszerzenie], --in-place[=rozszerzenie]
                 edytuje pliki "w miejscu" (tworzy kopie zapasowe
                 jeżeli zostało podane rozszerzenie).
  -b, --binary
                 otwiera pliki w trybie binarnym (CR+LF nie jest przetwarzane).
  -c, --copy
                 use copy instead of rename when shuffling files in -i mode
                 (avoids change of input file ownership)
  -l N, --line-length=N
                 ustala pożądaną długość łamanych linii dla polecenia `l'.
      --posix
                 wyłącza wszystkie rozszerzenia GNU.
  -r, --regexp-extended
                 używa w skrypcie rozszerzonych wyrażeń regularnych.
  -s, --separate
                 traktuje pliki jako oddzielne, a nie jako pojedynczy,
                 długi i ciągły strumień.
  -u, --unbuffered
                 ładuje minimalną ilość danych z plików wejściowych
                 i częściej oczyszcza bufor wyjściowy.
      --help     wyświetla tę oto pomoc i kończy pracę.
      --version  wyświetla numer wersji i kończy pracę.

Jeżeli nie zostaną podane opcje -e, --expression, -f, lub --file,
to wtedy pierwszy argument, który nie jest opcją linii poleceń sed,
zostanie wzięty jako skrypt sed do przetworzenia. Wszystkie pozostałe
argumenty są nazwami plików wejściowych; jeżeli nie zostaną podane
żadne pliki wejściowe, to wtedy odczytane zostanie standardowe wejście.

GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.

C:\Program Files (x86)\GnuWin32\bin>
0

No to masz seda. Teraz odpal komendę którą Ci podałem. Tylko zamiast sed użyj sed.exe

0
C:\Program Files (x86)\GnuWin32\bin>sed.exe sed '11382,720200d' D:\odfiltrowany.
txt >> C:\extracted.txt
sed.exe: -e wyrażenie #1, znak 3: niezakończone polecenie `s'

C:\Program Files (x86)\GnuWin32\bin>

Miejmy nadzieję, ostatni problem

0

A czy pomyślałeś chociaż minutkę nad tym co wpisałeś w konsolę? Nie wklejaj wszystkiego na pałę, zawsze zastanów się co wklejasz i sparsuj sobie to, bo inaczej się nie nauczysz.

Ja kazałem Ci wklepać w konsolę to sed '11382,720200d' D:\odfiltrowany.txt >> C:\extracted.txt. sed tutaj jest nazwą programu a to co jest dalej to są jego parametry. Ty zrobiłeś sed.exe sed ... czyli wywołałeś program sed.exe i jako argument podałeś mu sed. Pełne polecenie powinno wyglądać tak:

sed.exe '11382,720200d' D:\odfiltrowany.txt >> C:\extracted.txt

0

I tak nie działa:

C:\Program Files (x86)\GnuWin32\bin>sed.exe '11382,720200d' D:\odfiltrowany.txt

C:\extracted.txt
sed.exe: -e wyrażenie #1, znak 1: nieznane polecenie: `''

0

Wygląda na błąd parsowania, bo mu jakieś znaki nie pasują, może apostrofy? Może zamiast apostrofów na Windowsie powinno być cudzysłowie? Może coś się źle przekleja z forum. Spróbuj to ręcznie przepisać.

0

Tak cudzysłowy ale nie działa poprawnie zapisało odfiltrowane linie (a nie je wycięło) oraz połowa pliku to zapis: NULL NULL ...

0

Używasz >> czyli dodanie streama na koniec pliku, jesteś pewien, że wyczyściłeś plik przed operacją? Może masz jeszcze wynik działania starego polecenia? Zamiast >> możesz użyć > to wtedy plik powinien zostać wyczyszczony i dopiero potem zapisane do niego dane. Tak przynajmniej na Linuksie jest, nie wiem czy na Windowsie to samo zachowanie będzie.

0

To teraz nie idzie zapisać bo pisze, że Odmowa dostępu

0

To zapisuj wyjście programu gdzieś gdzie masz dostęp.

0

Chyba nic z tego nie będzie :

user image

0

Otwórz to jakimś hex edytorze i zobacz co to za znaki. Dziwne, że coś takiego powstaje. Możesz ten plik zuploadować gdzieś? Najlepiej oba, przed filtrowaniem i po filtrowaniu sedem.

0

Nie bardzo bo plik zawiera różne dane , które nie powinny być wypuszczane do Internetu

0

Możesz zreprodukować problem na jakimś prostszym przykładzie? Stwórz jakiś nowy plik, dodaj tam kilkanaście linijek (mogą być po prostu 1,2,3,4 na każdą linijkę, aby łatwo było debugować) i jeszcze raz odpal seda (oczywiście zmieniając parametry). Może coś walnięty jest plik, który próbujesz sedować?

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