たとえば、最初の 1,000,000 行をスキップして印刷したい非常に長いファイルがあります。
cat の man ページを調べましたが、これを行うオプションはありませんでした。これを行うコマンドまたは単純な Bash プログラムを探しています。
尻尾が必要です。いくつかの例:
$ 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. >
ファイルの最初の 10 行を削除する最も簡単な方法は次のとおりです。
$ sed 1,10d file.txt
X
が削除する最初の行の数である一般的なケースでは、これについてコメント者と編集者に感謝します。
$ sed 1,Xd file.txt
システムで GNU tail を使用できる場合は、次の操作を実行できます。
tail -n +1000001 huge-file.log
+
やりたいことをやってくれるキャラです。マニュアルページから引用するには:
K (バイト数または行数) の最初の文字が「+」の場合、各ファイルの先頭から K 番目の項目から出力します。
したがって、コメントに記載されているように、+1000001 を入力すると、最初の 1,000,000 行の後の最初の項目から印刷が開始されます。
最初の 2 行をスキップする場合:
tail -n +3 <filename>
最初の x 行をスキップする場合:
tail -n +$((x+1)) <filename>
範囲アドレスで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 システムで確実に動作するはずです。
使用する:
sed -n '1d;p'
このコマンドは最初の行を削除し、残りを出力します。
最初の10行を表示したい場合は、以下のようにsedを使用できます。
sed -n '1,10 p' myFile.txt
または、20から30までの線を表示したい場合は、次を使用できます。
sed -n '20,30 p' myFile.txt
sed
代替案を提案するだけです。:) 最初の 100 万行をスキップするには、 を試してください|sed '1,1000000d'
。
例:
$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
このシェルスクリプトは私にとってはうまくいきます:
#!/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
もちろん、たとえば、すべての引数値が期待どおりであることをテストすることによって、それを改善できます:-)
head コマンドと tail コマンドを使用してこれを行うことができます。
head -n <num> | tail -n <lines to print>
ここで、num は 1e6 + 印刷する行数です。
cat < File > | awk '{if(NR > 6) print $0}'
私は同じことをする必要があり、このスレッドを見つけました。
「tail-n+」を試しましたが、すべてが印刷されました。
+行が多いほどプロンプトでうまく機能しましたが、ヘッドレスモード(cronjob)で実行するとまったく異なる動作をすることがわかりました。
私はついにこれを自分で書いた:
skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"