Синтаксический анализ текстового файла в оболочке очень медленный и чрезвычайно подвержен ошибкам. Вы запускаете grep
один раз для каждой строки входного файла и sed
дважды для каждой строки, содержащей Count
. Избегайте этого.
Насколько я понимаю, это можно заменить на
awk '$1 == "Count" { printf("Count = %d\n", ++i); next } { print }' rand_file1 >rand_file1.new
Это выводит Count =
строк с правильным приращением, когда встречается строка, чье первое поле точно равно Count
, и пропускает все остальные строки как -.
Как вариант,
awk '$1 == "Count" { $0 = sprintf("Count = %d", ++i) } { print }' rand_file1 >rand_file1.new
который изменяет значение $0
(входной строки )и печатает все строки с одним print
.
Этот последний вариант можно сократить до
awk '$1 == "Count" { $0 = sprintf("Count = %d", ++i) } 1' rand_file1 >rand_file1.new
См. также " Почему использование цикла оболочки для обработки текста считается плохой практикой? ".