Если это файл фиксированной ширины, вы можете открыть файл для чтения / записи и использовать поиск, чтобы перейти к началу данных, которые вы хотите записать, и записать только измененные данные, а не всю строку. Это, вероятно, будет более эффективным, чем перезапись всего файла для замены одного поля.
Вот грубый пример. Он читает последнее поле (10,20,30), увеличивает его на 1 и записывает обратно:
tha_file (10 символов в каждой строке, включая перевод строки)
12 3 x 10
23 4 x 20
78 9 x 30
seeker.rb
#!/usr/bin/env ruby
fh=open("tha_file", "r+")
$RECORD_WIDTH=10
$POS=8
$FIELD_WIDTH=2
# seek to first field
fh.seek($POS - 1, IO::SEEK_CUR)
while !fh.eof?
cur_val=fh.read($FIELD_WIDTH).to_i
puts "read #{cur_val}"
fh.seek(-1 * $FIELD_WIDTH, IO::SEEK_CUR)
cur_val = cur_val + 1
fh.write(cur_val)
puts "wrote #{cur_val}"
# Move to start of next field in the middle of next record
fh.seek($RECORD_WIDTH - $FIELD_WIDTH, IO::SEEK_CUR)
end