2

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

我尝试过的选择很少

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

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

:314但是我期望使用vim 之类的东西perl, awk, grep.

4

4 回答 4

4

这是给定行号 With 打印单行的方法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自己。grep除非您使用nl或先行,否则无法做到这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.
于 2013-08-02T16:28:40.250 回答
3
perl -ne 'print if $. == 314' input
于 2013-08-02T16:43:59.433 回答
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
于 2013-08-02T19:16:19.280 回答
1

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

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

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

perl -ne 'print if $. == n' filename.txt
于 2013-08-02T16:36:23.743 回答