文字位置に基づいて一致と追加

文字位置に基づいて一致と追加

ファイルの固定位置にある数字/文字に基づいて一致し、更新する必要があるファイルがあります。

586位置の文字= 5の場合は、スペース614に0 "0"を挿入します。 586位置の文字= 1の場合は、スペース615に0 "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

関連情報