GNU/Linux >> Linux Esercitazione >  >> Linux

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

Se vuoi:

aggiungilo allo script esistente.

Puoi inserire ulteriori \"\" in ogni argomento di print come questo:

print "\"admin\"", "\"base\"", ...

Modificato:

Sì, forse impostare OFS è la soluzione migliore:

BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";


awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input

Per aggiungere virgolette attorno alle voci puoi usare un semplice ciclo AWK:

Script - simple_loop.awk

BEGIN {FS=";"}
{
  for(i=1;i<NF;i++){
       printf("\"%s\";", $i); 
  }
  printf("\"%s\"\n",$NF);
}

Ad esempio

echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk

Dovrebbe emettere

"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""

In questo caso userei un sed espressione invece di AWK.

Se i tuoi dati sono in un file chiamato data.txt , puoi farlo scrivendo:

sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

Ciò stamperà il risultato nell'output std, ma se vuoi sostituire il contenuto del file usa semplicemente sed -i in questo modo:

sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt

E questo è tutto!!

Spiegazione: Il sed espressione consiste in tre sed comandi separati da ";" che puoi eseguire separatamente:

sed "s/;/\";\"/g

Effettua una sostituzione (questo è ciò che significa la prima "s"), quindi la "/" (il separatore predefinito), ";" questo è ciò che vogliamo sostituire. Quindi il secondo separatore "/" e la sostituzione:\";\" È una sequenza:citazione sfuggita, un punto e virgola e una citazione sfuggita. Quindi con questo comando sostituiremo i punti e virgola ; da ";" . L'ultimo /g significa che ogni ; verrà sostituito (non solo il primo punto e virgola).

Se l'input era a;b;c dopo aver eseguito il primo comando sarà a";"b";"c .

Ora dobbiamo aggiungere le virgolette all'inizio (^ in un'espressione regolare) e alla fine ($ ). Questo è ciò che significa:

sed "s/^/\"/" // the first quote

E

sed "s/$/\"/" // the last quote

Ottenere l'output desiderato:

"a";"b";"c"

Linux
  1. Quando è necessaria la doppia virgoletta?

  2. Come sfuggire alle citazioni in Shell?

  3. Come aggiungere nuove righe nelle variabili in Bash Script?

  4. Colorare l'output della coda con Sed?

  5. Script Bash:come assegnare ogni riga di output di comando ai valori in un array?

Come aggiungere un bordo attorno al testo in GIMP

Bash cattura l'output di awk nell'array

Elimina le righe vuote usando sed

Libreria di output di script di shell colorata

Rientro dell'output su più righe in uno script di shell

Aggiungi uno script bash al percorso