たくさんの行を含むファイルがあります。各行の開始に対応するバイトオフセットのリストがあります。バイトオフセットに対応する各行が必要です。UNIX、Perl、または Python でこれを行う方法はありますか? 説明されているよりもはるかに大きな規模でこれを行う必要があります。
ファイル:
abcd
bcde
cdef
バイト オフセット:
0
10
望ましい出力:
abcd
cdef
急ごしらえパール:
my @offsets = ( 0, 10 );
open (my $data, '<', 'file.txt') || die "Can't open input: $!\n";
foreach my $offset (@offsets)
{
seek( $data, $offset, 0 );
my $line = <$data>;
print $line;
}
close $data;
seek()
必要なバイト位置に移動してから読み取ります。これは、Python と Perl からは簡単で、シェル スクリプトから実行できるはずです (私は考えていdd
ます)。
終わったとき(unutbuのおかげで)
#!/usr/bin/python
f = open(file_name, 'r')
offsets = [0,10]
for offset in offsets:
f.seek(offset)
print f.readline().strip()
これでうまくいくはずです。
def get_lines_by_offset(filename, *offsets):
with open(filename, "r") as fp:
results = []
for offset in offsets:
fp.seek(offset)
results.append(fp.readline().strip())
return results