Если вы хотите добавить все записи в один и тот же файл подмножества, используйте
#! /usr/bin/perl -l
use warnings;
use strict;
# demo only
my $buf = join "" =>
map "$_\n" =>
"1242\cA2282\cA2\cA1\cA0",
"1234\cA78\cA910\cA4\cA4",
"1380\cA2594\cA2\cA25\cA3",
"1404\cA2447\cA6\cA44\cA9";
open my $master, "+<", \$buf or die "$0: open: $!";
open my $subset, ">>", "subset.dat" or die "$0: open: $!";
while (<$master>) {
chomp;
my($id,$x,$y) = (split /\cA/)[0..2];
print $subset join "\cA" =>
$id, 56, $x, $y,
1112, 13, 14, 151617, 18, 192021.000000, 22.000000;
}
close $subset or warn "$0: close: $!";
Как указано в perlop , escape-последовательность \cA
создает используемый вами разделитель Ctrl-A (ASCII SOH). Чтобы сохранить демонстрацию автономной, приведенный выше код читает $buf
, как если бы это был файл, но, конечно, вы бы открыли мастер-файл в работе.
Выходные данные просматриваются через less
, где снова выделено жирным шрифтом ^ A указывает ASCII SOH:
1242<b>^A</b>56<b>^A</b>2282<b>^A</b>2<b>^A</b>1112<b>^A</b>13<b>^A</b>14<b>^A</b>151617<b>^A</b>18<b>^A</b>192021<b>^A</b>22
1234<b>^A</b>56<b>^A</b>78<b>^A</b>910<b>^A</b>1112<b>^A</b>13<b>^A</b>14<b>^A</b>151617<b>^A</b>18<b>^A</b>192021<b>^A</b>22
1380<b>^A</b>56<b>^A</b>2594<b>^A</b>2<b>^A</b>1112<b>^A</b>13<b>^A</b>14<b>^A</b>151617<b>^A</b>18<b>^A</b>192021<b>^A</b>22
1404<b>^A</b>56<b>^A</b>2447<b>^A</b>6<b>^A</b>1112<b>^A</b>13<b>^A</b>14<b>^A</b>151617<b>^A</b>18<b>^A</b>192021<b>^A</b>22