我想知道是否可以逐行获取内容作为输入。例如,如何使用perl
,grep
,awk
等工具获取第314行的内容。
我尝试的选项很少
计算到perl
中的行号并打印 - 不是最有效的
如果我知道行中的模式使用grep -in "pattern" file
查找行号。
但是我希望使用:314
,perl
,awk
来使用像grep
这样的东西。
答案 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
。除非您使用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.
答案 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