2

入力として行番号ごとに行の内容を取得できるかどうかを知りたいです。たとえば、、、などのツールを使用して 314 行目の内容を取得するにはどうすればよいですperlか。grepawk

試したオプションはほとんどありません

  1. 行番号まで数えperlて印刷する - 最も効率的ではない

  2. 行のパターンがわかっている場合は、を使用して行番号を見つけますgrep -in "pattern" file

しかし、vimのようなものは、:314私が期待しているものです.perlawkgrep

4

4 に答える 4

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ますが、私は自分自身を知らない/使用していませんperlgrepこれは使用しないとできませnlcat -ngrepただし、オプションを使用して、指定されたパターンに一致する行の行番号を出力-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 に答える
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

filename.txt を読み取って n 行目 (0 から始まる!) を出力する Perl-oneliner として考えられる解決策:

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 に答える