Предполагая, что вы спрашиваете, потому что sprintf("%'...
не работает с вашим awk на вашем компьютере с UNIX, одним из способов было бы набрать левой клавишей каждое число с 0, чтобы сделать его кратным 3 цифрам, а затем поставить запятуюперед каждыми 3 цифрами, затем удалите начальные 0 и запятые:
$ awk 'BEGIN{OFS=FS=";"} {for (i=3; i<=4; i++) {$i=sprintf("%099d",$i); gsub(/.../,",&",$i); sub(/^(,0+)+/,"",$i)} } 1' file
BitstreamCyberCJK;Freeware;30,275;28,686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
Y.OzFontN;Freeware;21,957;57,621;v13.00 sfnt rev 5 Pen-Ji (2010-08-24);YOzRN.TTC (13.5 MB);YOzFontN;Regular;TTC;Any
Вышеуказанное будет работать, если ваши входные числа не длиннее 99 цифр (например, меньше чем 1
, а затем99 нулей). Если вы не хотите жестко кодировать ограничение, тогда, добавив немного больше кода, вы можете просто заполнить поля нулями до ближайшего кратного 3-х значному размеру:
$ awk 'BEGIN{OFS=FS=";"} {for (i=3; i<=4; i++) {$i=sprintf("%0*d",int((length($i)+2)/3)*3,$i); gsub(/.../,",&",$i); sub(/^(,0+)+/,"",$i)} } 1' file
BitstreamCyberCJK;Freeware;30,275;28,686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
Y.OzFontN;Freeware;21,957;57,621;v13.00 sfnt rev 5 Pen-Ji (2010-08-24);YOzRN.TTC (13.5 MB);YOzFontN;Regular;TTC;Any
В форматировании нет зацикливанияпоэтому он должен быть эффективным даже для больших чисел.