Один путь awk:
$ awk 'BEGIN{FS=OFS=";"} length($5) > 4 { $1 = 3; tmp = $5; $5 = $6; $6 = tmp } 1' inputfile
1;127;20190529;094445;4261;7196
1;25;20190529;094636;1502;1536
1;1977;20190529;091419;7333;b001049109617002
3;1970;20190529;091426;2138;b001049109617002
3;1970;20190529;091426;2139;b001049109617002
Хотя я думаю, что срезы массива perl позволяют более элегантное решение для установки / замены полей:
$ perl -lF';' -e 'BEGIN{$,=";"} @F[0,4,5] = (3,@F[5,4]) if length $F[4] > 4; print @F' inputfile
1;127;20190529;094445;4261;7196
1;25;20190529;094636;1502;1536
1;1977;20190529;091419;7333;b001049109617002
3;1970;20190529;091426;2138;b001049109617002
3;1970;20190529;091426;2139;b001049109617002