GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituzione del trattino basso con virgola e rimozione delle virgolette doppie in CSV

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:

  1. 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).

  2. Seleziona "Cerca e sostituisci" dal menu (in genere si trova sotto "Modifica", se non c'è un menu "Cerca" separato).

  3. Inserisci _ nella casella di ricerca e , nella scatola sostitutiva.

  4. Fai clic su "Sostituisci tutto".

  5. Ripeti con " nella casella di ricerca e niente nella casella di sostituzione.

  6. 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.


Linux
  1. Perché The Tilde (~) non si espande all'interno di virgolette doppie?

  2. Come sfuggire alle citazioni in Shell?

  3. Qual è un buon mnemonico per Shell Double vs. Citazioni singole?

  4. Stampare una stringa con virgolette singole e altri caratteri speciali?

  5. Rimozione di virgolette singole e doppie in una stringa utilizzando solo i comandi bash/standard di Linux

WAZUH Rilevamento e rimozione di malware – Integrazione totale di virus

Differenza tra virgolette singole e doppie in Bash Shell

Aggiungi virgolette doppie attorno ai campi nell'output dello script AWK?

comando bash alias con virgolette singole e doppie

Che cos'è il doppio punto (..) e il singolo punto (.) in Linux?

come rimuovere le virgolette doppie in un csv