2017-05-18 1 views
1

Mon entrée estJe veux arrondir 4 colonnes ayant des valeurs décimales jusqu'à 4 décimales dans un fichier csv

status,avgMeasuredTime,avgSpeed,extID,medianMeasuredTime,TIMESTAMP,vehicleCount,_id,REPORT_ID,Lat1,Long1,Lat2,Long2,Distance between 2 points,duration of measurements,ndt in kmh 
OK,74,50,668,74,1406859600,5,20746220,158324,56.23172069428216,10.104986076057457,56.23172069428216,56.22579478256016,1030,52,71 
OK,926,4,981,926,1412098500,0,28060227,210173,56.20913963031665,10.246642527612721,56.20913963031665,56.2026461982616,1106,88,45 

Sortie prévue:

status,avgMeasuredTime,avgSpeed,extID,medianMeasuredTime,TIMESTAMP,vehicleCount,_id,REPORT_ID,Lat1,Long1,Lat2,Long2,Distance between 2 points,duration of measurements,ndt in kmh 
OK,74,50,668,74,1406859600,5,20746220,158324,56.2317,10.1050,56.2317,56.2258,1030,52,71 
OK,926,4,981,926,1412098500,0,28060227,210173,56.2091,10.2466,56.2091,56.2026,1106,88,45 

Comme vous pouvez le voir je veux arrondir 10ème, 11ème, 12ème, 13ème colonnes.

Aidez-nous s'il vous plaît. Merci d'avance.

Répondre

2

awk approche:

awk 'BEGIN{FS=OFS=","}NR>1{for(i=NF-3;i>NF-7;i--) $i=sprintf("%.4f",$i)}1' file 

La sortie:

status,avgMeasuredTime,avgSpeed,extID,medianMeasuredTime,TIMESTAMP,vehicleCount,_id,REPORT_ID,Lat1,Long1,Lat2,Long2,Distance between 2 points,duration of measurements,ndt in kmh 
OK,74,50,668,74,1406859600,5,20746220,158324,56.2317,10.1050,56.2317,56.2258,1030,52,71 
OK,926,4,981,926,1412098500,0,28060227,210173,56.2091,10.2466,56.2091,56.2026,1106,88,45 

for(i=NF-3;i>NF-7;i--) - itérer 4 champs à partir du champ 4e à la fin


Remarque: si le nombre de colonnes est toujours statique, vous pouvez y accéder directement par leur numéro de position:

awk 'BEGIN{FS=OFS=","}NR>1{for(i=10;i<=13;i++) $i=sprintf("%.4f",$i)}1' file 

Si vous voulez approche Python - ici nous allons :

with open("yourfile", 'r') as f: 
    for k,l in enumerate(f.read().splitlines()): 
     if k > 0: 
      items = l.split(',') 
      items[-4:-8:-1] = ["%.4f" % float(i) for i in items[-4:-8:-1]] 
      l = ','.join(items) 
     print(l) 

La sortie sera la même

+0

Merci monsieur! Fonctionne parfaitement! :) – Mikasa

+0

@Roshnirajan, j'ai ajouté l'approche Python - si vous voulez. Il devrait également fonctionner correctement – RomanPerekhrest

+1

@ EdMorton, surtout pour vous j'ai ajouté une note (parce que l'OP a déjà pris sa décision) – RomanPerekhrest