Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32

    [BASH] Manipolazione file csv

    Ciao,
    Ho un file .csv di circa 3000000 righe nel seguente formato (ridotto per semplicità sono più di tre righe):
    codice:
    1,1,22.5714
    1,2,22.8347
    1,3,23.1627
    @
    3,1,22.1473
    3,2,22.7027
    3,3,22.7747
    @
    5,1,22.644
    5,2,22.7653
    5,3,22.6863
    Quello che voglio ottenere è un altro file in cui nella prima colonna i numeri siano sequenziali, esemplificando dovrebbe diventare così:

    codice:
    1,1,22.5714
    1,2,22.8347
    1,3,23.1627
    @
    2,1,22.1473
    2,2,22.7027
    2,3,22.7747
    @
    3,1,22.644
    3,2,22.7653
    3,3,22.6863
    L'ho scritto in java ma è altamente inefficiente ci mette ore e fin ora non son riuscito a terminare l'esecuzione...
    codice:
    public void rinominaPrimaColonna(String inputFile) throws IOException{
    		String line = "";
    		String output = "";
    		String s[] = inputFile.split("\\.");
    		String outFile = s[0]+"_t1.csv";
    		
    		FileWriter fw = new FileWriter(new File(outFile));
    		
    		BufferedReader orig = new BufferedReader(new FileReader(inputFile));
    		
    		int i = 1;
    		
    		while((line = orig.readLine()) != null){
    			
    			if(!line.equals("@")){
    				
    				String item[] = line.split(",");
    				output += i + "," + item[1] + "," + item[2] + "\n";
    				
    			}
    			else{
    				output += line + "\n";
    				i++;
    			}
    		}
    		fw.write(output);
    		fw.flush();
    		fw.close();
    	}
    Potete aiutarmi a tradurlo in bash?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    32
    problema diciamo risolto. Era inefficiente (si bloccava proprio) perché salvavo prima tutto in una stringa e poi scrivevo su file, ed evidentemente l'oggetto stringa avrà qualche tipo di limite massimo, quindi ho risolto scrivendo volta per volta nel file invece di concatenare all'output.

    Cheers

    PS: mi piacerebbe comunque sapere come farlo in bash

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.