4

最初にn行のテキスト(nは<1000)、空の行、そして多くの型指定されていないバイナリデータを含む非常に大きなファイルを取得しました。

テキストの最初のn行を抽出してから、どういうわけかバイナリデータの正確なオフセットを抽出したいと思います。

最初の行の抽出は簡単ですが、どうすればオフセットを取得できますか?bashはエンコードを認識しないため、文字数を数えるだけでは意味がありません。

4

4 に答える 4

5

-bgrep には、バイト オフセットを出力するオプションがあります。

例:

$ hexdump -C foo 
00000000  66 6f 6f 0a 0a 62 61 72  0a                       |foo..bar.|
00000009
$ grep -b "^$" foo 
4:
$ hexdump -s 5 -C foo
00000005  62 61 72 0a                                       |bar.|
00000009

最後のステップでは、改行をスキップするために 4 ではなく 5 を使用しました。

ファイル内のウムラウト (äöü) でも機能します。

于 2011-04-22T10:59:29.610 に答える
3

grep空の行を見つけるために使用します

grep -n "^$" your_file | tr -d ':'

オプションtail -n 1で、最後の空行が必要な場合に使用します (つまり、バイナリの開始前にファイルの上部に空行を含めることができる場合)。

headファイルの先頭部分を取得するために使用します。

head -n $num
于 2011-04-22T10:36:36.893 に答える
1

Perl はファイルのどこにいるかを教えてくれます:

pos=$( perl -le '
    open $fh, "<", $ARGV[0]; 
    $/ = "";  # read the file in "paragraphs" 
    $first_paragraph = <$fh>; 
    print tell($fh)
' filename )

括弧内に、私はこれをワンライナーしようとしていました

pos=$( perl -00 -lne 'if ($. == 2) {print tell(___what?___); exit}' filename

「現在のファイルハンドル」変数とは何ですか? ドキュメントで見つけられませんでした。

于 2011-04-22T12:47:05.080 に答える