2015-06-04 3 views
0

Я хочу напечатать первые 10 строк огромного файла в новом файле. С этой Oneliner я могу напечатать строки на мониторе:Perl oneliner: напечатать первые строки в файле

> perl -ne "print if $. < 10" in.csv 

Я попытался это:

> perl -ne "print if $. < 10" in.csv >out.txt 

Но это только создает файл out.txt без написания первых строк в ней. Что не так с этим кодом?
Спасибо за помощь


Windows 7/Strawberry Perl


Update1:
Если я посылаю результат печати на мониторе с помощью:

> perl -ne "print if $. <= 10" in.csv 

программа не останавливается , то есть первые десять строк выводятся на монитор, но это не заканчивается:

> 

Мне нужно остановить программу, используя Ctrl + c.

Использование простого csv-файла, такого как ikegami (всего несколько строк), работает onliner. Я предполагаю, что в csv-файле есть что-то.

Update 2:
Оригинальный Onliner:

> perl -ne "print if $. <= 10" in.csv >out.txt 

работы. Я должен подождать несколько секунд. Csv-файл имеет размер 2 ГБ. Онлайнер:

> perl -pe "exit if $. > 10" in.csv >out.txt 

дает результат немедленно. Вывод: первый onliner проходит через все строки, второй - после 10 строк.

Извините, что я беспокою вас с этой проблемой. Я выучил свой урок: используйте подходящий onliner или подождите несколько секунд.

+3

Это вопрос MSWin cmd.exe, а не Perl. – choroba

+0

Он работает для меня как есть на win2k8r2. Установлен ли выходной файл только для чтения после его первоначального создания? – stevieb

+0

@stevieb. Нет. Это можно написать. Я попробовал пример икегами, и он работает. Очевидно, что это имеет какое-то отношение к исходному csv-файлу. – giordano

ответ

1

гул? Это правильно (кроме < 10 должен быть <= 10):

>type in.csv 
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 
m 
n 
... 
z 

>perl -ne "print if $. <= 10" in.csv >out.txt 

>type out.txt 
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 

> 

Более быстрое решение будет выходить, когда он не имеет больше печатать, а не печатать весь файл.

perl -pe"last if $. > 10" in.csv >out.txt 
+1

Наверное, нет смысла читать и отбрасывать лишние строки. Как насчет: выход 'perl -pe ', если $.> 10" '? –

+0

Хороший совет. Лично я использую 'last'. – ikegami

+0

@Grant McLean Спасибо! Это работает с моим csv-файлом. Может быть, у вас есть идея, почему этот oneliner работает, а другой не использует оригинальный файл? Если вы ответите как ответ **, я дам вам точку. – giordano

Смежные вопросы