在perl中获取第n行,其中n可以是四个整数

时间:2013-09-23 18:10:23

标签: perl

我想使用Perl从文件中取四行。我有四个整数变量;例如:

a= 5;
b = 45;
c=30;
d=8;

是否可以从文件中获取并存储与这些值对应的行号(即第5行,第45行,第30行,第8行)作为四个字符串?我一直在玩

-ne 'print if($.==5)';

但是有更有说服力的方式吗?这似乎只是检查我目前在哪一行......

4 个答案:

答案 0 :(得分:6)

如果你想把它作为一个单行,那么使用哈希会很容易:

perl -ne '%lines = map { $_ => 1 } 23, 45, 78, 3; print if exists $lines{$.}' test.txt 

这会创建一个类似( 23 => 1, 45 => 1, 78 => 1, 3 => 1 )的哈希,然后使用exists检查当前行号是否是哈希中的键。

答案 1 :(得分:4)

如果你正在使用一个小文件并让内存将内容粘贴到脚本中,你可以将文件啜饮到一个数组中,然后以数组元素的形式访问这些行:

# define the lines you want to capture
$a=5;
$b=45;
$c=30;
$d=8;

# slurp the file into an array
@file = <>;

# push the contents of the array back by one
# so that the line numbers are what you expect
# (otherwise you would have to add 1 to get the
# line you are looking for)
unshift (@file, "");

# access the desired lines directly as array elements
print $file[$a];
print $file[$b];
print $file[$c];
print $file[$d];

如果您正在寻找命令行单行,您也可以尝试使用awk或sed:

awk 'NR==5' file.txt
sed -n '5p' file.txt

答案 2 :(得分:2)

一个班轮

 perl -ne 'print if ( $. =~ /^45$|^30$|^8$|^5$/  )' file.txt

答案 3 :(得分:1)

这正是Tie::File有利的工作。

代码看起来像这样

use strict;
use warnings;

use Tie::File;

tie my @file, 'Tie::File', 'myfile.txt';

print $file[$_-1], "\n" for qw/ 5 45 30 8 /;