GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Felder in der AWK-Skriptausgabe in doppelte Anführungszeichen setzen?

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"

Linux
  1. Wann sind doppelte Anführungszeichen erforderlich?

  2. Wie entkomme ich Zitaten in der Shell?

  3. sed Linien zusammenfügen

  4. Entferne ein bestimmtes Zeichen mit awk oder sed

  5. So entfernen Sie die doppelten Anführungszeichen in einer CSV-Datei

So fügen Sie in GIMP einen Rahmen um Text hinzu

Löschen Sie leere Zeilen mit sed

Farbige Shell-Script-Ausgabebibliothek

Mehrzeilige Ausgabe in einem Shell-Skript einrücken

Ausführen eines Python-Skripts von PHP

Fügen Sie dem Pfad ein Bash-Skript hinzu