Zeichen am Anfang und Ende der Spalte hinzufügen

Zeichen am Anfang und Ende der Spalte hinzufügen

Ich habe eine Datei wie diese:

78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22

Und ich möchte es folgendermaßen ändern:

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22

Ich kämpfe schon lange damit und weiß nicht, wie ich es machen soll. Ich bin für jede Hilfe dankbar, danke.

Antwort1

Sie könnten es mit awk versuchen:

echo "78@54@this@15@23
65@22@is@92@16
34@12@an@14@18
13@42@example@52@22" |
awk -F@ '{print "\""$1"\"@"$2"@\""$3"\"@"$4"@"$5}' 

"78"@54@"this"@15@23
"65"@22@"is"@92@16
"34"@12@"an"@14@18
"13"@42@"example"@52@22

Antwort2

Etwas ausführlicher, aber ich würde dieses awk schreiben:

awk -F@ -v OFS=@ '
    function quote(x) {return sprintf("\"%s\"", x)}
    {print quote($1), $2, quote($3), $4}
'

Antwort3

Ich denke, einAwk-Lösungist wahrscheinlich besser, aber Sie können auch Folgendes verwenden sed:

sed -r 's/(\d+)@(\d+)@(\w+)(.*)/"\1"@\2@"\3"\4/' /path/to/your/file

Antwort4

In awk: Setzen Sie Anführungszeichen um die ersten drei Felder und drucken Sie dann die Zeile.

awk -F @ '{for (i = 1; i <= 3; i++) $i = "\"" $i "\""; print}'

-F @setzt den Feldtrenner auf @. Die Schleife setzt Anführungszeichen um die ersten drei Felder. Das letzte print(kurz für print $0) druckt die Zeile mit den geänderten Feldern; $0wird neu aufgebaut, wenn einzelne Felder ( $1, $2, …) geändert werden.

verwandte Informationen