So fügen Sie Anführungszeichen zu Zeilenumbrüchen in Feldwerten in einer Datei hinzu

So fügen Sie Anführungszeichen zu Zeilenumbrüchen in Feldwerten in einer Datei hinzu

Die Eingabedatei hat zwei Datensätze und drei Felder, das zweite Attribut enthält neue Zeilenzeichen. Ich möchte jeden Feldwert in Anführungszeichen setzen.

Eingabedatei:

100|Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce|2019-01-24
200|Minimum amount not avialable in your account.
Last time deposited amonut month ago|2019-01-24

Die erforderliche Ausgabe sollte wie folgt aussehen

"100"|"Alert created becuase of high volume.
Money withdrawan more 5000.
Try to access acccount from unathorised devíce"|"2019-01-24"
"200"|"Minimum amount not avialable in your account.
Last time deposited amonut month ago"|"2019-01-24"

Antwort1

Sie können es mit diesem awk versuchen:

awk -F'\n' '!f{$1="\""$1;f=1}{f=f+gsub("[|]","\"|\"")}f==3{$0=$0"\"";f=0}1' infile

Antwort2

Sie können dies tun mit perl:

perl -0pe 's/([^|]*)\|([^|]*)\|([^|\n]*)(\n|$)/"\1"|"\2"|"\3"\4/g' input_file
  • -0Lesen Sie die Datei auf einmal, nicht Zeile für Zeile.
  • -pdrucke die Zeile am Ende
  • -eder Ausdruck
  • s/pattern/replacement/gMuster durch Ersatz ersetzen

Antwort3

$ cat input.txt | tr "\n" "\t" \
  |awk -v FS="|" -v OFS="|" '{for(i=1;i<=NF;i++) $i="\""$i"\"";}1' \
  |tr "\t" "\n"
  • trneue Zeile in einen Tabulator umwandeln. Die Eingabe wird also linearisiert
  • Wir geben an , dass es als Feldtrennzeichen awkbehandelt werden soll . Nun können wir über jedes Feld iterieren und die Anführungszeichen hinzufügen. Anschließend wird die gesamte Zeile ausgegeben|
  • trwandelt den Tab wieder in eine neue Zeile um

verwandte Informationen