2008-10-05 5 views
2

Как извлечь всю строку в строке, например, строку 3. Эти данные сохраняются в текстовом редакторе в linux. Вот мой данные:Как извлечь строку или строку?

1,julz,kath,shiela,angel 
2,may,ann,janice,aika 
3,christal,justine,kim 
4,kris,allan,jc,mine 

Я хочу выхода как:

3,christal,justine,kim 

ответ

2

Вы можете назначить оператор алмаза на вашем дескриптор в список, каждый элемент будет строки или строки.

open $fh, "myfile.txt"; 
my @lines = <$fh>; 

EDIT: Это решение захватывает все линии так, что вы можете получить доступ к любой, который вы хотите, например, строка 3 будет $lines[2] ... Если вам действительно нужна только одна конкретная строка, это будет другое решение, как и другие ответчики ».

+2

Если файл является огромным (то есть большим, чем ОЗУ), это было бы очень плохое решение, поскольку оно вскрывает все содержимое в памяти. – dland 2008-10-05 22:19:20

+0

Да, это правда, это решение было бы полезно только для небольших файлов, таких как тот, который приведен в примере. – 2008-10-05 23:06:07

6
$ perl -ne'print if $. == 3' your_file.txt 

Ниже приводится версия сценарий @ysth's answer:

$ perl -mTie::File -e'tie @lines, q(Tie::File), q(your_file.txt); 
> print $lines[2]' 
11

Следующий фрагмент читает в первых трех строках, печатает только третий затем выходит обеспечить, чтобы ни ненужной обработки не происходит.

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

perl -ne 'if ($. == 3) {print;exit}' infile.txt 

Как perlvar указывает, $. это номер текущей строки для последнего дескриптора файла доступ.

5

Если это всегда третья строка:

perl -ne 'print if 3..3' <infile >outfile 

Если это всегда один, который имеет числовое значение «3» в качестве первого столбца:

perl -F, -nae 'print if $F[0] == 3' <infile >outfile # thanks for the comment doh! 

Поскольку вы не говорите как вы определяли эту линию, я предоставляю альтернативы.

3

Ум, ответы -n предполагают, что вопрос «что такое скрипт, который ...». В этом случае perl не лучший ответ. Но я не читаю этого вопроса.

В общем случае, если строки не имеют фиксированной длины, вам необходимо прочитать строку файла по строке , пока не дойдете до нужной вам линии. Tie::File автоматизирует этот процесс для вас (хотя, так как код, который он заменил, настолько тривиальным, я редко бываю с ним, сам).

use Tie::File; 
use Fcntl "O_RDONLY"; 
tie my @line, "Tie::File", "yourfilename", mode => O_RDONLY 
    or die "Couldn't open file: $!"; 
print "The third line is ", $line[2]; 
3

Для более общего решения:

open my $fh, '<', 'infile.txt'; 
while (my $line = <$fh>) { 
    print $line if i_want_this_line($line); 
} 

где i_want_this_line реализует критерии определения того, какие строки (ы) вы хотите.

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