
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
-0
Lesen Sie die Datei auf einmal, nicht Zeile für Zeile.-p
drucke die Zeile am Ende-e
der Ausdrucks/pattern/replacement/g
Muster 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"
tr
neue Zeile in einen Tabulator umwandeln. Die Eingabe wird also linearisiert- Wir geben an , dass es als Feldtrennzeichen
awk
behandelt werden soll . Nun können wir über jedes Feld iterieren und die Anführungszeichen hinzufügen. Anschließend wird die gesamte Zeile ausgegeben|
tr
wandelt den Tab wieder in eine neue Zeile um