Ändern Sie Werte in einer Spalte basierend auf der Anzahl der darin enthaltenen Doppelpunkte

Ändern Sie Werte in einer Spalte basierend auf der Anzahl der darin enthaltenen Doppelpunkte

Ich würde den Inhalt der zweiten Spalte basierend auf der Anzahl der darin enthaltenen Doppelpunkte manipulieren. Wenn das zweite Feld mehr als einen Doppelpunkt enthält, benötige ich den Inhalt vor dem ersten Doppelpunkt, andernfalls den gesamten Wert.

#Input    
1 1131:11854476:4:1$ 0 114476 1 4
5 367504:11862778:4:2$ 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575:38680372:1$ 0 38372 1 2

# Output
1 1131 0 114476 1 4
5 367504 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575 0 386372 1 2

Ich habe verschiedene Vorschläge gefunden, eine einzelne Spalte nach der Manipulation oder Verarbeitung der gesamten Datei zu kopieren.Schnuraber ich müsste die restlichen Spalten unverarbeitet lassen. Könnten Sie mir bitte Ideen geben, wie ich dies mit einem einzigen Befehl ( awk/ cutEinzeiler) oder mehreren Befehlen erreichen kann.

Antwort1

Sie könnten splitdas 2. Feld hinzufügen :und, wenn Sie mehr als 2 Teile erhalten (das heißt, die Anzahl der Elemente im Array z), nur das 1. behalten:

awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile

Wenn Sie verwenden möchten, subkönnten Sie Folgendes tun:

awk '{sub(/:.*:.*/,"",$2)};1' infile

Versuchen Sie also, zwei (oder mehr) Doppelpunkte zu ersetzen.

verwandte Informationen