我想知道是否可以逐行获取内容作为输入。例如,如何使用 , , 等工具获取第 314 行perl
的grep
内容awk
。
我尝试过的选择很少
数到行号
perl
并打印 - 不是最有效的如果我知道该行中的模式,则使用 . 查找行号
grep -in "pattern" file
。
:314
但是我期望使用vim 之类的东西perl
, awk
, grep
.
这是给定行号 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.
perl -ne 'print if $. == 314' input
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
作为 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