.txtファイルがあり、読みやすくするために、小数点区切り文字でカンマを追加する必要があります。この長い数字は特定の列にのみ存在し、これを行う方法を見つけることができません。列はセミコロンで区切られ、任意の文字を含めることができます。私はawkでifステートメントを使用して列の長さが3より大きいことを確認しようとしましたが、3つの数字ごとにカンマを入れる方法が見つかりませんでした。数字は3番目と4番目の列にあります。
これ
BitstreamCyberCJK;Freeware;30275;28686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
Y.OzFontN;Freeware;21957;57621;v13.00 sfnt rev 5 Pen-Ji (2010-08-24);YOzRN.TTC (13.5 MB);YOzFontN;Regular;TTC;Any
次のようにする必要があります。
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
ベストアンサー1
GNU Coreutilsを使用していて、numfmt
ロケールがこれらのグループ化をサポートしている場合は、次のものを使用できます。
numfmt -d ';' --field=- --grouping --invalid='ignore' < file
前任者。
$ numfmt -d ';' --field=- --grouping --invalid='ignore' < 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
どのフィールドに数値フィールドが含まれているかを知っている場合は、そのフィールドを明示的に指定して処理を省略できます--invalid
。
numfmt -d ';' --field=3,4 --grouping < file
%'
GNU awkがある場合は、フォーマット修飾子を使用して次の操作を実行できますsprintf
。
gawk '
BEGIN {OFS=FS=";"}
{for(i=1;i<NF;i++) {if($i ~ /^[0-9]+$/) $i = sprintf("%'\''d", $i)}}
1
' file