Wenn Sie möchten:
fügen Sie dies dem vorhandenen Skript hinzu.
Sie können zusätzlich \"\"
einfügen in jedem Argument von print
so:
print "\"admin\"", "\"base\"", ...
Bearbeitet:
Ja, vielleicht ist die Einstellung von OFS die bessere Lösung:
BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";
awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input
Um die Einträge in Anführungszeichen zu setzen, können Sie eine einfache AWK-Schleife verwenden:
Skript - simple_loop.awk
BEGIN {FS=";"}
{
for(i=1;i<NF;i++){
printf("\"%s\";", $i);
}
printf("\"%s\"\n",$NF);
}
Zum Beispiel
echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk
Sollte ausgegeben werden
"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""
In diesem Fall würde ich einen sed
verwenden Ausdruck anstelle von AWK.
Wenn sich Ihre Daten in einer Datei namens data.txt
befinden , können Sie es schreiben:
sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt
Dadurch wird das Ergebnis in die Standardausgabe ausgegeben, aber wenn Sie den Inhalt der Datei ersetzen möchten, verwenden Sie einfach sed -i
so:
sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt
Und das ist alles !!
Erklärung: Die sed
Ausdruck besteht aus drei sed
Befehle getrennt durch ";" die Sie separat ausführen können:
sed "s/;/\";\"/g
Es macht eine Substitution (das bedeutet das erste "s"), dann das "/" (das Standardtrennzeichen), ";" das wollen wir ersetzen. Dann das zweite Trennzeichen „/“, und die Ersetzung:\";\"
Es ist eine Sequenz:maskiertes Anführungszeichen, ein Semikolon und ein maskiertes Anführungszeichen. Mit diesem Befehl ersetzen wir also die Semikolons ;
durch ";"
. Die letzte /g
bedeutet, dass jeweils ;
ersetzt (nicht nur das erste Smikolon).
Wenn die Eingabe a;b;c
war nach diesem Ausführen des ersten Befehls ist es a";"b";"c
.
Jetzt müssen wir am Anfang Anführungszeichen hinzufügen (^
in einem regulären Ausdruck) und am Ende ($
). Das bedeutet also:
sed "s/^/\"/" // the first quote
Und
sed "s/$/\"/" // the last quote
Die gewünschte Ausgabe erhalten:
"a";"b";"c"