Если вы хотите заменить второе поле числом, которое уменьшается на 10000 от значения в первой строке, попробуйте
awk 'NR == 1 { value = $2 }
NR > 1 { value -= 10000; $2 = value }
1' file >newfile
В некоторых вариантах Awk есть опция --inplace
или аналогичная, которая позволяетзаписать результаты обратно во входной файл напрямую.
Рефакторинг этого сценария в sed
довольно бессмысленный и умозрительный, но если вы знаете верхние границы того, сколько строк вы ожидаете в файле, выможет сгенерировать сценарий sed
, такой как
2s/[1-9][0-9]*$/1900000/
3s/[1-9][0-9]*$/1800000/
4s/[1-9][0-9]*$/1700000/
:
, для столько строк, сколько необходимо, а затем просто запустить sed
один раз с этим сценарием в качестве входных данных.Если вы работаете в Linux, вы сможете передать скрипт в стандартный ввод sed
:
for ((i=1900000, j=2; i>0; i-= 10000, j++)); do
printf '%is/[1-9][0-9]*$/%i\n' "$j" "$i"
done |
sed -i -f - example.txt