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"