681

たとえば、最初の 1,000,000 行をスキップして印刷したい非常に長いファイルがあります。

cat の man ページを調べましたが、これを行うオプションはありませんでした。これを行うコマンドまたは単純な Bash プログラムを探しています。

4

13 に答える 13

1106

尻尾が必要です。いくつかの例:

$ 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. >
于 2009-03-03T02:24:05.813 に答える
154

ファイルの最初の 10 行を削除する最も簡単な方法は次のとおりです。

$ sed 1,10d file.txt

Xが削除する最初の行の数である一般的なケースでは、これについてコメント者と編集者に感謝します。

$ sed 1,Xd file.txt
于 2012-10-17T07:17:01.723 に答える
112

システムで GNU tail を使用できる場合は、次の操作を実行できます。

tail -n +1000001 huge-file.log

+やりたいことをやってくれるキャラです。マニュアルページから引用するには:

K (バイト数または行数) の最初の文字が「+」の場合、各ファイルの先頭から K 番目の項目から出力します。

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

于 2009-03-03T02:28:45.270 に答える
44

最初の 2 行をスキップする場合:

tail -n +3 <filename>

最初の x 行をスキップする場合:

tail -n +$((x+1)) <filename>
于 2013-07-09T18:10:26.630 に答える
24

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

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

-nまたは、既知の範囲のみを出力する場合は、次のフラグを指定して print コマンドを使用します。

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

このソリューションは、GNU ユーティリティの存在に関係なく、すべての Unix システムで確実に動作するはずです。

于 2016-12-02T16:19:22.947 に答える
17

使用する:

sed -n '1d;p'

このコマンドは最初の行を削除し、残りを出力します。

于 2018-08-03T16:23:44.437 に答える
16

最初の10行を表示したい場合は、以下のようにsedを使用できます。

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

または、20から30までの線を表示したい場合は、次を使用できます。

sed -n '20,30 p' myFile.txt
于 2012-12-20T10:04:41.057 に答える
14

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

例:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
于 2012-01-26T06:53:15.973 に答える
11

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

#!/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

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

于 2009-03-31T13:28:55.043 に答える
9

head コマンドと tail コマンドを使用してこれを行うことができます。

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

ここで、num は 1e6 + 印刷する行数です。

于 2009-03-03T02:25:27.043 に答える
4
cat < File > | awk '{if(NR > 6) print $0}'
于 2012-11-21T20:14:27.230 に答える
-2

私は同じことをする必要があり、このスレッドを見つけました。

「tail-n+」を試しましたが、すべてが印刷されました。

+行が多いほどプロンプトでうまく機能しましたが、ヘッドレスモード(cronjob)で実行するとまったく異なる動作をすることがわかりました。

私はついにこれを自分で書いた:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
于 2009-05-28T17:30:58.980 に答える