.txt 파일이 있는데 가독성을 높이기 위해 소수 구분 기호로 쉼표를 추가해야 합니다. 이 긴 숫자는 특정 열에만 존재하며 이를 수행할 방법을 찾을 수 없습니다. 열은 세미콜론으로 구분되며 모든 문자를 포함할 수 있습니다. awk에서 if 문을 사용하여 열의 길이가 3보다 큰지 확인하려고 했지만 세 숫자마다 쉼표를 넣는 방법을 찾을 수 없었습니다. 숫자는 세 번째와 네 번째 열에 있습니다.
이것
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