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


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.


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.