Un modo molto più semplice è usare tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Il modo in cui funziona è tr
accetta due argomenti:il set di caratteri da sostituire e la loro sostituzione. In questo caso abbiamo solo set di 1 carattere. Reindirizziamo input.csv
inserire tr
flusso stdin di tramite <
operatore di shell e reindirizzare l'output risultante a tr -d '"'
per eliminare le virgolette doppie.
Ma awk
può farlo anche tu.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Il modo in cui funziona è leggermente diverso:awk legge ogni file riga per riga, ogni script in linea è /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Qui non abbiamo uno schema, quindi significa eseguire il blocco di codice per ogni riga. gsub()
La funzione viene utilizzata per la sostituzione globale all'interno di una riga, quindi la usiamo per sostituire i caratteri di sottolineatura con virgole e le virgolette doppie con una stringa nulla (eliminando di fatto il carattere). Il 1
è al posto del pattern match con blocco di codice mancante, che per impostazione predefinita stampa semplicemente la riga; in altre parole il blocco di codice con gsub()
fa il lavoro e 1
stampa il risultato.
Usa il reindirizzamento della shell (>
) per inviare l'output a un nuovo file:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv
In alternativa, puoi usare anche questo sed
comando:
$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Anche Perl, la "motosega dell'esercito svizzero" per l'elaborazione del testo da riga di comando, può farlo. La sintassi è (non a caso) abbastanza simile al tr
e sed
esempi:
perl -pe 'tr/_"/,/d' input.csv > result.csv
oppure:
perl -pe 's/_/,/g; s/"//g' input.csv > result.csv
Ma onestamente, se non vuoi prendere il tempo per imparare un nuovo linguaggio di programmazione (che è davvero quello che sono awk, Perl e sed e altri strumenti come loro) solo per questo compito di base, potresti farlo anche in qualsiasi editor di testo che supporti la ricerca e la sostituzione:
-
Apri il file CSV nel tuo editor di testo preferito (come gedit, kate, mousepad, ecc.; anche il vecchio Blocco note o Wordpad su Windows può farlo).
-
Seleziona "Cerca e sostituisci" dal menu (in genere si trova sotto "Modifica", se non c'è un menu "Cerca" separato).
-
Inserisci
_
nella casella di ricerca e,
nella scatola sostitutiva. -
Fai clic su "Sostituisci tutto".
-
Ripeti con
"
nella casella di ricerca e niente nella casella di sostituzione. -
Salva il file.
Ora, se hai bisogno di farlo per 100 o 1000 file invece di uno solo, allora imparare un nuovo strumento da riga di comando inizia ad avere senso. E, naturalmente, una volta che sai come usare Perl o sed o qualsiasi altra cosa, risparmierai molto tempo e fatica con attività simili in seguito. Ma solo per un lavoro una tantum che non ti aspetti di dover ripetere, a volte uno strumento interattivo di base come un editor di testo è la soluzione più semplice.