-4

2 つのファイルがあり、 の各行の文字位置 92 ~ 97 からテキストを取得し、file1それを使用して の対応する行の同じセクションを置き換える必要がありますfile2

例えば:

ファイル1

LOCAR0013LOCBLKAR0013LOCDEFAR0013LOC024500230012BLKAR0013              7Q3G013             003340000000000000

LOCAR0030LOCBLKAR0030LOCDEFAR0030LOC091500960004BLKAR0030              M20G010             000165000000000000

LOCAR0031LOCBLKAR0031LOCDEFAR0031LOC024500230012BLKAR0031              M21G011             002240000000000000

ファイル2

LOCAR0013LOCBLKAR0013LOCDEFAR0013LOC024500230012BLKAR0013              7Q3G4GR             000040000000000000

LOCAR0030LOCBLKAR0030LOCDEFAR0030LOC091500960004BLKAR0030              M20GTRS             000105000000000000

LOCAR0031LOCBLKAR0031LOCDEFAR0031LOC024500230012BLKAR0031              M21G2AS             000040000000000000

新しいファイルへの期待される出力

LOCAR0013LOCBLKAR0013LOCDEFAR0013LOC024500230012BLKAR0013              7Q3G4GR             003340000000000000

LOCAR0030LOCBLKAR0030LOCDEFAR0030LOC091500960004BLKAR0030              M20GTRS             000165000000000000

LOCAR0031LOCBLKAR0031LOCDEFAR0031LOC024500230012BLKAR0031              M21G2AS             002240000000000000

これは Unix/Solaris システムで使用しています。

4

4 に答える 4

1

これはあなたが必要なことをするはずです

use strict;
use warnings;
use autodie;

my ($file1, $file2) = @ARGV;

open my $fh1, '<', $file1;
open my $fh2, '<', $file2;

while (my $line2 = <$fh2>) {
    my $line1 = <$fh1>);
    if (defined $line1) {
        substr($line2, 91, 6) = substr($line1, 91, 6);
    }
    print $line2;
}
于 2013-03-11T15:18:13.210 に答える
0

ファイルをperlのメモリにロードすると仮定します。

my @file1 = <$fh1>;
my @file2 = <$fh2>;

for my $line (0 .. $#file1) {
    my $replace = substr($file1[$line], 91, 6);  # take your string from file1
    substr($file2[$line], 91, 6) = $replace;     # put it into file2
}

これで、に変更された行が表示され@file2ます。

このsubstr関数は左辺値として使用することもでき、それに値を割り当てることができます。これがここで行うことです。

于 2013-03-11T15:18:59.640 に答える
0

このワンライナーは機能するはずです:

 awk 'NR==FNR{a[$1]=substr($0,92,5);next}($1 in a) {$0=substr($0,1,92) a[$1] substr($0,97)}1' file file2
于 2013-03-11T16:10:01.383 に答える
0

どうですか:

$ paste file1 file2 | awk '{print $1,$5,$3}' OFS='\t\t'
LOCAR0013LOCBLKAR0013LOCDEFAR0013LOC024500230012BLKAR0013       7Q3G4GR     003340000000000000

LOCAR0030LOCBLKAR0030LOCDEFAR0030LOC091500960004BLKAR0030       M20GTRS     000165000000000000

LOCAR0031LOCBLKAR0031LOCDEFAR0031LOC024500230012BLKAR0031       M21G2AS     002240000000000000
于 2013-03-11T15:02:59.507 に答える