特定のオフセットのパターンに基づいてファイルを分割するPerlスクリプト

特定のオフセットのパターンに基づいてファイルを分割するPerlスクリプト

以下の例に示すように、大容量ファイルを小さなサブファイルに分割する方法についてのヘルプが必要です。

標準はオフセット30(バイト31~2バイト)を見ているということです。オフセットに0Aが含まれている場合はレコードをファイルAにコピーし、0B @ 32の場合はファイルBにコピーし、0Cの場合はファイルCにコピーする必要があります。

入力ファイルの例:

1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110C11111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111

出力ファイルA:

1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111

出力ファイルB:

1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111

出力ファイルC:

1111111111111111111111111111110C11111111111111111111111

ベストアンサー1

各行に対してこれを使用して、目的の substr($line,30,2)2文字を取得できます。そのように

#!/usr/bin/perl
use warnings;
use strict;

open(my $file1,">file1");
open(my $file2,">file2");
open(my $file3,">file3");
while(<>)
{
  my $ch=substr($_,30,2);
     if ($ch eq '0A') { print $file1 $_; }
  elsif ($ch eq '0B') { print $file2 $_; }
  elsif ($ch eq '0C') { print $file3 $_; }
  else { print "Bad line skipped: $_"; }
}

私たちは実際にそれを見ることができます:

$ cat input 
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110C11111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110B111111111111111111
$ ./script input 
$ cat file1
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
$ cat file2
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111
$ cat file3
1111111111111111111111111111110C11111111111111111111111

おすすめ記事