Intereting Posts

совпадение и добавление на основе позиции символа

У меня есть файл, где мне нужно сопоставлять и обновлять, исходя из того, какой номер / символ находится в фиксированной позиции в файле.

если символ в позиции 586 = 5, тогда вставьте нуль «0» в пространство 614 .. если символ в позиции 586 = 1, то вставьте нуль «0» в пробе 615

Я использовал sed для добавления других пропущенных символов и удаления / добавления пробелов на разных позициях, но они были исправлены по всему файлу.

Может быть вариант с awk (не проверен):

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

Установив FS = "", разделитель awk является символом.

Предполагая, что вы хотите сделать это в каждой строке ввода и что смещение должно быть основано на 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}' 
 perl -i -pe ' m/^.{585}\K5/ && s/.{613}\K/0/; m/^.{585}\K1/ && s/.{614}\K/0/; ' inoutfile