以下の例に示すように、大容量ファイルを小さなサブファイルに分割する方法についてのヘルプが必要です。
標準はオフセット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
答え2
$ perl -ne '
$filename = substr($_,30,2);
open $fh{$filename}, ">", $filename unless exists $fh{$filename};
print {$fh{$filename}} $_
' file
$ cat 0A
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
1111111111111111111111111111110A111111111111111111111111111111
$ cat 0B
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111
1111111111111111111111111111110B111111111111111111
$ cat 0C
1111111111111111111111111111110C11111111111111111111111