Мне нужно прочитать файл размером около 5 Гбайт и написать скрипт в Python, который сделал бы это:
cat file | awk -F '","' '{if ($12 !="" ) print $9,$10,$12}'| sort -n | uniq -c | sort -nr | head -100
9,10,12 - параметры, которые я хочу получить из этого файла.
Я могу сделать это в Bash без проблем, а в скриптах Python с os.system и этой командой... Но мне нужно написать скрипт Python правильно.
Проблема в том, что я не могу сохранять данные в любом списке или переменной, потому что сценарий будет запущен на сервере, не может использовать такой объем оперативной памяти из-за размера файла.
Я думал писать данные в файл вместо списка, но я не нашел способ сделать это.
Вы можете использовать хотя бы переменную счетчика python
Это может оптимизировать хранение триплетов и количество раз, когда они появляются.
Псевдо скрипт:
for line in file.readlines():
data = line.strip().split(',')
x = data[colums_that_you_want]
xtoken = '_'.join(x)
counter[xtoken] += 1
counter.most_common(100)
Для образовательных целей я хотел бы показать, что эту строку можно переписать гораздо более эффективно:
оригинал:
$ cat file | awk -F '","' '{if ($12 !="" ) print $9,$10,$12}'| sort -n | uniq -c | sort -nr | head -100
1. удалить cat
:
Едва ли нужна команда cat
.
$ awk -F '","' '{if ($12 !="" ) print $9,$10,$12}' file | sort -n | uniq -c | sort -nr | head -100
2. улучшить awk
:
$ awk -F '","' '($12 !="" ){print $9,$10,$12}' file | sort -n | uniq -c | sort -nr | head -100
3. устранить sort -n | uniq -c
sort -n | uniq -c
: вы можете избавиться от этих двух, снова используя awk
. Вы храните все в массиве, но это, по сути, то, что sort
и uniq
тоже.
$ awk -F '","' '($12 !="" ){a[$9 OFS $10 OFS $12]++}
END{for(i in a) print a[i],i}' file | sort -nr | head -100
4. PROCINFO
последние две трубы: с помощью GNU awk вы можете отсортировать массив с помощью PROCINFO
$ awk -F '","' 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}
($12 !="" ){a[$9 OFS $10 OFS $12]++}
END{for(i in a) {j++; print a[i],i; if (j==100) exit} }' file
Я не уверен, что это то, что вы ищете, но, возможно, это может помочь, если вы объедините это с разделом текста, предложенным другими пользователями.
Вы можете сохранить свои данные в файле.txt следующим образом:
file = open("path/file.txt", "w") # This will create the file.
write = file.write(text_variable) # This will write the content of text_variable into your file.txt
file.close()
Существует и другой способ использования JSON:
import json
text = json.dumps(text_variable) # This will store the content of text_variable in a json format.
file = open("path/file.json", "w") # This will create the json file.
write = file.write(text) # This will write the content of text into your file.json
file.close()
Затем, если вы хотите получить данные своего JSON, просто выполните следующее:
import json
file = open("path/file.json", "r") # This will open the json file in read mode.
jsontext = file.read()
text = json.loads(jsontext) # You will have in text the original data you had at the beginning.
Я надеюсь, что это помогает.