Как я могу извлечь строку или строку? - PullRequest
3 голосов
/ 05 октября 2008

Как мне извлечь всю строку подряд, например, строку 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

Ответы [ 6 ]

12 голосов
/ 05 октября 2008

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

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

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

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

7 голосов
/ 05 октября 2008
$ perl -ne'print if $. == 3' your_file.txt

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

$ perl -mTie::File -e'tie @lines, q(Tie::File), q(your_file.txt); 
> print $lines[2]'
5 голосов
/ 05 октября 2008

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

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 голосов
/ 06 октября 2008

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

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

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

3 голосов
/ 06 октября 2008

Хм, ответы -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];
2 голосов
/ 05 октября 2008

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

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

РЕДАКТИРОВАТЬ: Это решение захватывает все строки, чтобы вы могли получить доступ к любому, который вы хотите, например, строка 3 будет $lines[2] ... Если вам действительно нужна только одна конкретная строка, это будет другое решение, как у других ответчиков.

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