Ich versuche eine riesige Datei (+5.000.000 Datensätze) zu manipulieren, so kann ich den Wert der 8. Spalte zum Beispiel ersetzen.Ersetzen Zeichenfolge durch einen neuen Wert
If $8 = 1 replace it with success
if $8 = 2 replace it with check
if $8 = null replace with undefined
Hier ist ein Stück der Daten, die von einem ,
Zeichen getrennt ist:
"APPLICATION_ID","ORIGIN_ID","SERVICE_ID","PROVIDER_ID","RATING_ID","ATO","DATE","USER_TYPE","ESTATUS","OPERATION_ID"
"3","2","424","5020","1058","3017292917","30/11/2016 01:14:25 a.m.","1","2004","14804862360104011458"
Das Feld I ersetzt werden soll ist USER_TYPE
$8
bei gelegen ich das versucht, aber es doesn‘ t ersetzen Sie die Werte:
awk '{if($8 = 1) print $1, $2, $3, $4, $5, $6, $7, "success", $9, $10}' input_file
Wie kann ich das schaffen?
wie unten ein einzelnen '=' weisen den Wert auf der RHS auf den Namen auf der LHS. Um auf Gleichheit zu prüfen, benutze '==', also 'if ($ 8 == 1) ...'. Sie müssen auch 'awk' sagen, um Felder auf dem', 'char zu teilen, entweder mit awk -F, '{...}' Datei' ODER' awk 'BEGIN {FS = ","} {.... } 'Datei'. Was passiert, wenn '' 'in den dbl-zitierten Daten stehen? Kaboom! ... So viel besser, ein Char zu verwenden, um Felder in Ihrer Datendatei zu trennen (oder vielleicht '|' char). Viel Glück. –
shellter
Wenn Sie mit CSV umgehen müssen, ist awk definitiv nicht der beste Weg, da es keine Fälle behandelt, in denen der Wert das Trennzeichen enthält. Sie sollten ein Werkzeug verwenden, das entwickelt wurde, um mit CSV umzugehen, zum Beispiel 'csvtool'. –