2013-03-11 48 views
0

字符替换我需要能够替换,字符位置58-71空白在一个文件中的每一行,在的Unix/Solaris中行中的某些现在的位置与空白

提取例:

LOCAX0791LOCPIKAX0791LOC AX0791LOC095200130008PIKAX079100000000000000WL1G011    000092000000000000 

LOCAX0811LOCPIKAX0811LOC AX0811LOC094700450006PIKAX0811000000000000006C1G011    000294000000000000 

LOCAX0831LOCPIKAX0831LOC AX0831LOC094000180006PIKAX083100000000000000OJ1G011    000171000000000000 

回答

1

简单的Perl oneliner

perl -pne 'substr($_, 58, 13) = (" "x13);' inputfile.txt > outputfile.txt 
+0

PSIAlt,工作一种享受,仅需数秒......非常感谢! – Cambolie 2013-03-11 14:01:00

+0

57,14和x14,不是?如果有空行,它会中断。 – Scrutinizer 2013-03-11 15:14:03

+0

@Scrutinizer是的,中断,任何其他行格式都是意外的。不,OP表示职位,而不是char数字。无论如何其简单的调整。 – PSIAlt 2013-03-11 15:41:00

0

试试这个:

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

输出的第一行:

LOCAX0791LOCPIKAX0791LOC AX0791LOC095200130008PIKAX079    WL1G011 
0

在Perl试试这个:

use strict; 
use warnings; 

while(<STDIN>) { 

    my @input = split(//, $_); 
    for(my $i=58; $i<71; $i++) { 
     $input[$i] = " "; 
    } 
    $_ = join(//, @input); 
    print $_; 
} 
2

或者:

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

随着道歉可怕的14空间字符串。

0

如果您对您的Solaris系统GAWK,你可以尝试:

gawk 'BEGIN{FIELDWIDTHS = "57 14 1000"} gsub(/./," ",$2)' OFS= file