是否有一种Linux方式(awk,sed,grep等)在文件的每一行中的特定索引处插入一个字符?
例如,下面是file.txt的内容
0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+00001+99999999999
0043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+99999999999
我想在file.txt中的每一行的给定索引(比如15,19,88和93)处插入逗号,以便结果如下:
006701199099999,1950,051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+,00001,+99999999999
004301199099999,1950,051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+,00221,+99999999999
答案 0 :(得分:1)
sed 's/\(.\{93\}\)/&,/;s/\(.\{88\}\)/&,/;s/\(.\{19\}\)/&,/;s/\(.\{15\}\)/&,/' YourFile
订单很重要,或者您需要记住下一次更改的附加字符
你可以马上做,但需要一些解释
sed 's/\(.\{15\}\)\(.\{4\}\)\(.\{69\}\)\(.\{5\}\)/\1,\2,\3,\4/' YourFile
答案 1 :(得分:0)
Perl解决方案:
perl -ne '$l = $_;
substr $l, $_, 0, "," for reverse 15, 19, 88, 93;
print $l' < input > output
我使用了reverse,因为你需要从右边开始 - 否则,每次插入后,所有剩余的索引都必须递增。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed 's/./&,/93;s/./&,/88;s/./&,/19;s/./&,/15' file