根据字符位置进行匹配和添加

根据字符位置进行匹配和添加

我有一个文件,需要根据文件中固定位置的数字/字符进行匹配和更新。

如果位置 586 处的字符 = 5,则在空格 614 处插入零“0”。如果位置 586 处的字符 = 1,则在空格 615 处插入零“0”

我使用 sed 添加其他缺失的字符并删除/添加各个位置的空格,但这些在整个文件中都是固定的。

答案1

可能是 awk 的一个选项(未测试):

$ awk 'BEGIN{FS=OFS=""}$586==5{$614="0" $614}$586==1{$615="0" $615}1' inputfile >newfile
$ mv newfile inputfile

通过设置 FS="" ,awk 分隔符是字符。

答案2

假设您打算在输入的每一行上执行此操作,并且偏移量从 1 开始并以字符数而不是字节数表示,POSIXly:

sed '
  s/^.\{585\}5.\{27\}/&0/;t
  s/^.\{585\}1.\{28\}/&0/'

或者:

awk 'length >= 613 && substr($0, 586, 1) == "5" {
       $0 = substr($0, 1, 613) "0" substr($0, 614)
       next
     }
     length >= 614 && substr($0, 586, 1) == "1" {
       $0 = substr($0, 1, 614) "0" substr($0, 615)
     }
     {print}'

答案3

perl -i -pe '
   m/^.{585}\K5/ && s/.{613}\K/0/;
   m/^.{585}\K1/ && s/.{614}\K/0/;
' inoutfile

相关内容