Перейти к содержимому

Линукс командной строки для большого набора данных?

0

проблема: у меня большой файл данных Excel, в нем более 1000 столбцов и более 40000 строк. Я должен определить, где данная строка имеет значение> 199 в любой данной ячейке. Если какая-либо строка не имеет> 199 в любой данной ячейке, то я хочу удалить эти строки. Так что у меня остались только строки, где хотя бы одна ячейка имеет значение> 199.

У меня также есть тот же файл данных, что и в текстовом файле, поэтому я подумал, что наилучшим подходом может быть использование командной строки linux для решения этой проблемы, а не использование файла excel (который громоздок для работы, учитывая количество строк и колонны). Но я новичок в Linux и AWK, поэтому я искал общий совет, как подойти к этому вопросу? Спасибо большое

Спасибо за помощь.

Пример изображения данных приведен ниже. Здесь я хотел бы только строки с выделенными ячейками (потому что их> 200), но я не могу просто использовать функцию сортировки или сложные операторы if than, потому что в моем наборе данных так много столбцов, что это занимает слишком много времени ...

Линукс командной строки для большого набора данных?

791 просмотр
Anna спросил 7 лет назад
A 1

2 ответа

0

Так как вы сказали "ищите общий совет, как подойти к этому вопросу?" вот один подход:

Если вы знаете, как использовать Python, вы можете сохранить файл в виде файла, разделенного запятыми, и просмотреть его, просто написав небольшой скрипт, а затем использовать его csvдля обработки данных. Вы можете использовать любую операционную систему, которая поддерживает Python.

Я просто изучаю Python, поэтому я не писал сценарий раньше, какой сценарий будет делать это?

Anna · 7 лет назад · 0

Вы можете, например, использовать модуль "xlrd", в частности его методы sheet.nrows и sheet.row_values ​​(n). Небольшое руководство по использованию xlrd описано на https://www.geeksforgeeks.org/reading-excel-file-using-python/

Christoph Sommer · 7 лет назад · 0
Elmo ответил 7 лет назад
E 104
0

У меня нет общих советов. В частности, я советую вам использовать эту команду awk:

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

Я создал небольшой файл данных, основанный на числах из вашего файла, и несколько я составил самостоятельно:

$ 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 

Чтобы удалить строки из вашего файла, выполните

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

Заметки:

  • Ради себя вы должны решить, является ли ваше требование> 199,> 200, ≥ 200 или как.
  • Если вам нужно сохранить строку 1 (т. Е. Строку 1, строку заголовка), скажите так.
  • Я не проверял это на большом файле.  awkне должно быть никаких проблем с огромным количеством строк (строк). Тысяча столбцов (полей) может быть проблемой, но я сомневаюсь в этом.
Scott ответил 7 лет назад
S 15 457