获取perl,awk,grep中逐行的内容

时间:2013-08-02 16:27:33

标签: perl sed awk grep

我想知道是否可以逐行获取内容作为输入。例如,如何使用perlgrepawk等工具获取第314行的内容。

我尝试的选项很少

  1. 计算到perl中的行号并打印 - 不是最有效的

  2. 如果我知道行中的模式使用grep -in "pattern" file查找行号。

  3. 但是我希望使用:314perlawk来使用像grep这样的东西。

4 个答案:

答案 0 :(得分:4)

这是如何使用awk

给出行号来打印单行
$ awk 'NR==314' file

如果文件很大,您可能希望在到达该行后退出:

$ awk 'NR==314{print;exit}' file

你也可以使用sed

$ sed '314!d' file

同样:

$ sed -n '314p' file

使用sed按行打印一行,然后退出:

$ sed -n '314{p;q}' file

perl解决方案与awk解决方案类似,但我不知道/自己使用perl。除非您使用grepnl,否则无法使用cat -n来完成此操作。但是,您可以使用grep选项打印与-n匹配给定模式的行的行号。

来自man grep

-n, --line-number                                  (-n is specified by POSIX.)  
Prefix each line of output with the 1-based line number within its input file.

答案 1 :(得分:3)

perl -ne 'print if $. == 314' input

答案 2 :(得分:1)

作为Perl-oneliner的可能解决方案是读取filename.txt并打印出行n(从0开始!):

perl -e 'my @lines= do { local(*ARGV); @ARGV="/path/filename.txt"; <> }; print $lines[n]'

较短的一个未知特殊变量$.(从1开始):

perl -ne 'print if $. == n' filename.txt

答案 3 :(得分:1)

perl -MTie::File -we'use Tie::File; tie my @file, "Tie::File", $ARGV[0], autochomp=>0 or die "Error opening $ARGV[0]"; print $file[313]' /path/filename.txt

或使用coreutils:

head -n 314 /path/filename.txt | tail -n 1