假设要将所有记录附加到同一个子集文件,请使用
#! /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
,转义序列
\cA
产生
全选
(ascii-soh)您使用的分隔符。为了保持演示的独立性,上面的代码是
$buf
就好像它是一个文件,但当然,您会在生产中打开主文件。
通过查看的输出
less
哪里又加粗了
^ A
表示ASCII SOH:
1242^A56^A2282^A2^A1112^A13^A14^A151617^A18^A192021^A22
1234^A56^A78^A910^A1112^A13^A14^A151617^A18^A192021^A22
1380^A56^A2594^A2^A1112^A13^A14^A151617^A18^A192021^A22
1404^A56^A2447^A6^A1112^A13^A14^A151617^A18^A192021^A22