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

604
Anna

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

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

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

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

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

0
Я не понимаю Это вопрос об Excel? Вы экспортировали свои данные из Excel в текстовый файл? Подробности, пожалуйста. Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. Scott 5 лет назад 0
Анна действительно описала свой случай. Она / он имеет «тот же файл данных, что и текстовый файл» и хочет спросить совета о том, как подходить к разбору этого txt-файла в командной строке linux и какую комбинацию инструментов использовать для этого. Следует ли использовать трубопровод с несколькими командами или какой-то другой подход. Я тоже заинтересован в этом. Спасибо за вопрос. titus 5 лет назад 0
@titus: Я ожидаю, что кто-то, кто был на сайте в течение восьми лет, узнает об изменениях и истории изменений. Если вы посмотрите, вы увидите, что выражение «тот же файл данных, что и текстовый файл» было добавлено после того, как я сделал свой комментарий. Scott 5 лет назад 1

2 ответа на вопрос

0
Elmo

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

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

Я просто изучаю Python, поэтому я не писал сценарий раньше, какой сценарий будет делать это? Anna 5 лет назад 0
Вы можете, например, использовать модуль "xlrd", в частности его методы sheet.nrows и sheet.row_values ​​(n). Небольшое руководство по использованию xlrd описано на https://www.geeksforgeeks.org/reading-excel-file-using-python/ Christoph Sommer 5 лет назад 0
0
Scott

У меня нет общих советов. В частности, я советую вам использовать эту команду 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не должно быть никаких проблем с огромным количеством строк (строк). Тысяча столбцов (полей) может быть проблемой, но я сомневаюсь в этом.

Похожие вопросы