0

我需要能够在Unix / Solaris上的文件中的每一行上用空格替换字符位置58-71

提取示例:

LOCAX0791LOCPIKAX0791LOC   AX0791LOC095200130008PIKAX079100000000000000WL1G011             000092000000000000

LOCAX0811LOCPIKAX0811LOC   AX0811LOC094700450006PIKAX0811000000000000006C1G011             000294000000000000

LOCAX0831LOCPIKAX0831LOC   AX0831LOC094000180006PIKAX083100000000000000OJ1G011             000171000000000000
4

5 回答 5

2

或者:

sed -r  's/^(.{57})(.{14})/\1              /' bar.txt

为可怕的 14 空格字符串道歉。

于 2013-03-11T13:27:09.483 回答
1

简单的 Perl oneliner

perl -pne 'substr($_, 58, 13) = (" "x13);' inputfile.txt > outputfile.txt
于 2013-03-11T13:31:28.207 回答
0

在 Perl 中试试这个:

use strict;
use warnings;

while(<STDIN>) {

   my @input = split(//, $_);
   for(my $i=58; $i<71; $i++) {
      $input[$i] = " ";
   }
   $_ = join(//, @input);
   print $_;
}
于 2013-03-11T13:24:50.337 回答
0

如果你对你的 Solaris 机器有兴趣,你可以尝试:

gawk 'BEGIN{FIELDWIDTHS = "57 14 1000"} gsub(/./," ",$2)' OFS= file
于 2013-03-11T14:38:08.013 回答
0

尝试这个:

awk 'BEGIN{FS=OFS=""} {for(i=57;i<=71;i++)$i=" "}1' file

第一行的输出:

LOCAX0791LOCPIKAX0791LOC   AX0791LOC095200130008PIKAX079               WL1G011
于 2013-03-11T13:22:46.830 回答