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
/ cut
Einzeiler) oder mehreren Befehlen erreichen kann.
Antwort1
Sie könnten split
das 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, sub
könnten Sie Folgendes tun:
awk '{sub(/:.*:.*/,"",$2)};1' infile
Versuchen Sie also, zwei (oder mehr) Doppelpunkte zu ersetzen.