wiersz poleceń linuksa dla dużego zestawu danych?

0

problem: mam duży plik danych programu Excel, istnieje ponad 1000 kolumn i ponad 40 000 wierszy. Muszę określić, gdzie dany wiersz ma wartość> 199 w dowolnej komórce. Jeśli jakikolwiek wiersz nie ma> 199 w żadnej komórce, chcę je usunąć. Aby pozostały mi tylko wiersze, w których co najmniej jedna komórka ma wartość> 199.

Mam również ten sam plik danych, co plik tekstowy, więc pomyślałem, że najlepszym rozwiązaniem może być skorzystanie z wiersza polecenia systemu Linux, aby rozwiązać ten problem, a nie użycie pliku programu Excel (który jest nieporęczny do pracy z podaną liczbą wierszy i kolumny). Ale jestem nowicjuszem w Linuksie i awk, więc szukałem ogólnych rad, jak podejść do tego problemu? Dzięki wielkie

Dziękuję za pomoc

Przykładowy obraz zestawu danych poniżej. Tutaj chciałbym tylko wiersze, które wyróżniły komórki (ponieważ są one> 200), ale nie mogę po prostu użyć funkcji sortowania lub skomplikowanych instrukcji if niż, ponieważ w moim zestawie danych jest tak wiele kolumn, więc jest to zbyt czasochłonne ...

wprowadź opis zdjęcia tutaj

Ania
źródło
Nie rozumiem. Czy to pytanie dotyczące programu Excel? Czy wyeksportowałeś swoje dane z Excela do pliku tekstowego? Szczegóły proszę. Proszę nie odpowiadać w komentarzach; edytuj  swoje pytanie, aby było jaśniejsze i bardziej kompletne.
Scott
Anna jasno opisała swoją sprawę. On / On ma „ten sam plik danych co plik tekstowy” i chce poprosić o radę, jak podejść do analizy tego pliku txt w linii poleceń Linuksa i jakiej kombinacji narzędzi do tego użyć. Powinien zostać użyty potokowanie z kilkoma poleceniami lub inne podejście. Interesuje mnie to również. Dziękuję za pytanie.
Titus
1
@titus: Spodziewałbym się, że ktoś, kto był w witrynie od ośmiu lat, będzie wiedział o edycjach i historii zmian. Jeśli spojrzysz, zobaczysz, że po napisaniu komentarza dodano instrukcję „ten sam plik danych co plik tekstowy”.
Scott

Odpowiedzi:

0

Ponieważ powiedziałeś „szukasz ogólnych porad, jak podejść do tego problemu?” oto jedno podejście:

Jeśli wiesz, jak korzystać z Pythona, możesz zapisać plik jako plik oddzielony przecinkami i uruchomić plik, pisząc mały skrypt, a następnie użyj csvczegoś, aby zrobić coś z danymi. Możesz użyć dowolnego systemu operacyjnego, który obsługuje Python.

Elmo
źródło
Właśnie uczę się Pythona, więc nie napisałem wcześniej skryptu, jaki skrypt by to zrobił?
Anna
Możesz na przykład użyć modułu „xlrd”, w szczególności jego metod sheet.nrows i sheet.row_values ​​(n). Mały samouczek dotyczący korzystania z Xlrd jest opisany na stronie geeksforgeeks.org/reading-excel-file-using-python
Christoph Sommer
0

Nie mam wielu ogólnych rad. W szczególności radzę użyć tego polecenia awk:

awk '{
        over=0
        for (i=1; i<=NF; i++) if ($i > 199) over=1
        if (over) print
     }'

Stworzyłem mały plik danych, na podstawie liczb z twojego pliku, a kilka sam stworzyłem:

$ cat input
81      23      40
31      0       416     12
2       2       1
157     41      80      201
417     42      17

$ ./myscript input
31      0       416     12
157     41      80      201
417     42      17

Aby usunąć wiersze z pliku, wykonaj

$ ./myscript input > input.new
$ mv input.new input

Uwagi:

  • Dla własnego dobra powinieneś zdecydować, czy twoje wymaganie wynosi> 199,> 200, ≥ 200, czy co.
  • Jeśli chcesz zachować wiersz 1 (tj. Wiersz 1, wiersz nagłówka), powiedz tak.
  • Nie testowałem tego na dużym pliku.  awknie powinno mieć problemu z dużą liczbą wierszy (linii). Problemem może być tysiąc kolumn (pól) , ale wątpię w to.
Scott
źródło