소수점 이하 몇 자릿수만 유지하세요.

소수점 이하 몇 자릿수만 유지하세요.

내용이 아래와 같은 파일이 있습니다.

2,0,-1.8433679676403103,0.001474487996447893
3,1,0.873903837905657,0.6927701848899038
1,1,-1.700947426133768,1.5546514434152598

4개의 열이 있는 CSV. 여기서 세 번째와 마지막 열은 부동 소수점입니다.

전체 숫자(기호 포함)를 제거하고 소수 부분의 처음 세 자리만 유지하여 위의 예가 다음과 같이 되도록 하고 싶습니다.

2,0,843,001
3,1,873,692
1,1,700,554

어떻게 해야 하나요?

답변1

sed 's/-\{,1\}[0-9]*\.\([0-9]\{,3\}\)[0-9]*/\1/g' file

-이는 선택적 숫자로 시작 하고 그 뒤에 숫자, 마침표, 숫자가 뒤따르는 문자열을 찾고 그 중에서 처음 세 숫자를 선택합니다.

또 다른 방법은 다음과 같이 [0-9]바꾸는 것입니다 .[[:digit:]]

sed 's/-\{,1\}[[:digit:]]*\.\([[:digit:]]\{,3\}\)[[:digit:]]*/\1/g' file

답변2

사용 awk:

awk -F[,.] '{print $1","$2","substr($4,1,3)","substr($6,1,3)}' file

쉼표 와 점 에 값을 -F설정 하는 데 사용됩니다.FS,.

substr점 뒤에 필요한 3자리 숫자가 인쇄됩니다.

답변3

어? 왜 파이썬이 아닌가?

import csv
filename = <yourfilenamehere>

for line in list(csv.reader(open(filename, 'r'))):
    extra = [str(int((abs(float(num)) % 1) * 1000)).zfill(3) for num in line[2:]]
    print(*(line[:2] + extra), sep=',')

답변4

$ perl -lne 'print join " ", /\.\K(...)/g' file

관련 정보