Я использую системы импорта на основе текстовых файлов с разделителями. Обычно используемые файлы могут быть почти 2 ГБ, и я должен проверить некоторые строки из этого файла. Поэтому я хочу знать, как я могу выводить (на другой файл или просто на экран) строки определенного значения? Например. номер строки 1010123, 1002451, 994123 и т.д., точно так же, как в исходном файле?
Как получить некоторые конкретные строки из огромного текстового файла в unix?
Ответ 1
Чтобы напечатать строку N
, используйте:
sed 'Nq;d' file
Чтобы напечатать несколько строк (при условии, что они находятся в порядке возрастания), например. 994123, 1002451, 1010123:
sed '994123p;1002451p;1010123q;d' file
q
после последнего номера строки сообщает sed
выйти, когда достигнет 1010123-й строки, вместо того, чтобы тратить время, перебирая оставшиеся строки, которые нам не интересны. Именно поэтому он эффективен на больших файлы.
Ответ 2
Вы можете сделать это со многими инструментами Unix, например, с помощью awk
:
# print first 5 lines with awk
awk 'NR>=1&&NR<=5{print}NR>=6{exit}' file
# print selection of lines
awk 'NR==994123||NR==1002451||NR==1010123{print}NR>1010123{exit}' file
Ответ 3
В python:
readThisFile = open('YOURFILE')
outputFile = open('OUTPUT', w)
for actualline, linetext in enumerate(readThisFile):
if actualline == WANTEDLINE
outputFile.write(linetext)
else:
pass
Если вы хотите, вы можете изменить этот script для работы с аргументами (например, getline.py 1234)