内容が以下のようなファイルがあります。
2,0,-1.8433679676403103,0.001474487996447893
3,1,0.873903837905657,0.6927701848899038
1,1,-1.700947426133768,1.5546514434152598
4つの列があるCSV。ここで、3番目と最後の列は浮動小数点です。
全体の数字(記号を含む)を削除し、小数部の最初の3桁だけを維持し、上記の例が次のようになるようにしたいと思います。
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
-
これはオプションの数字で始まり、その後に数字、ピリオド、数字が続く文字列を探し、その中から最初の3つの数字を選択します。
別の方法は、次のように[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
え?なぜPythonではないのですか?
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