web-dev-qa-db-ja.com

Bashの最初のX行をスキップしてファイルを印刷する

非常に長いファイルを印刷したいのですが、例えば最初の1e6行をスキップします。私はcatのmanページを覗いていますが、これを実行する選択肢はありませんでした。私はこれを行うためのコマンドまたは単純なbashプログラムを探しています。

446
Eduardo

あなたは尾が必要です。いくつかの例:

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

特定の数の「最初の」行をスキップする必要がある場合は、

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

つまり、N行をスキップしたい場合は、N + 1行目を印刷します。例:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

最後の非常に多くの行だけを見たい場合は、 "+"を省略します。

$ tail -n <N> <filename>
< last N lines of file. >

システムにGNU tailがある場合は、次の手順を実行できます。

tail -n +1000001 huge-file.log

あなたが望むことをするのは+文字です。 manページから引用するには:

Kの最初の文字(バイト数または行数)が `+ 'の場合、各ファイルの先頭からK番目の項目から始めて印刷します。

したがって、コメントに記載されているように、+ 1000001を入力すると、最初の1,000,000行の後の最初の項目から印刷が開始されます。

90
Eddie

ファイルの最初の10行を削除するのが最も簡単な方法です。

$ sed 1,10d file.txt
88
David Parks

AWKによる冗長度の低いバージョン

awk 'NR > 1e6' myfile.txt

しかし、整数を使うことをお勧めします。

25
newtover

sedの代替案を提案するためだけのものです。 :)最初の100万行をスキップするには、|sed '1,1000000d'を試してください。

例:

$ Perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
13
tuomassalo

最初の2行をスキップしたい場合
tail -n +3 <filename>

最初のx行をスキップしたい場合
tail -n +$((x+1)) <filename>

12
saipraneeth

最初の10行を見たい場合は、下記のようにsedを使用してください。

sed -n '1,10 p' myFile.txt

または、20から30行目を見たい場合は、次のようにします。

sed -n '20,30 p' myFile.txt
12
Kadir YILDIZ

このシェルスクリプトは私にとってはうまくいきます:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

このサンプルファイル(file.txt)と共に使用します。

one
two
three
four
five
six

コマンド(ファイルの2行目から4行目までを抽出します):

edu@debian5:~$./script.sh 2 4 file.txt

このコマンドの出力:

two
three
four

もちろん、例えばすべての引数値が期待されるものであることをテストすることによって、あなたはそれを改良することができます:-)

10
sourcerebels

sed deleteコマンド範囲アドレス を使用します。例えば:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

あるいは、既知の範囲だけを印刷したい場合は、printコマンドに-nフラグを付けて使用します。

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

このソリューションは、GNUユーティリティの有無にかかわらず、すべてのUNIXシステムで確実に機能するはずです。

9
maerics

これを行うには、headコマンドとtailコマンドを使用します。

head -n <num> | tail -n <lines to print>

numは1e6 +印刷したい行数です。

5
Dana the Sane
sed -n '1d;p'

このコマンドは最初の行を削除し、残りを印刷します

4
cat < File > | awk '{if(NR > 6) print $0}'
3
aamadeo