Angenommen, ich habe eine Datenspalte wie diese:
sample123
sample456
samplexyz
Ich kann ganz einfach zwei neue Spalten hinzufügen, indem ich Folgendes verwende:
sed -i "s/$/\t1.1\tC/" <file.txt>
Jetzt ist es:
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
Nehmen wir nun an, ich füge unten einige neue Daten an:
sample123 1.1 C
sample456 1.1 C
samplexyz 1.1 C
sampleNew1
sampleNew2
sampleNew3
Wenn ich versuche, die neuen Spalten für diese Daten anzuhängen, werden sie an alle Zeilen angehängt. Wenn ich jetzt also Folgendes ausführe:
sed -i "s/$/\t1.2\tA/" <file.txt>
Es sieht aus wie:
sample123 1.1 C 1.2 A
sample456 1.1 C 1.2 A
samplexyz 1.1 C 1.2 A
sampleNew1 1.2 A
sampleNew2 1.2 A
sampleNew3 1.2 A
Wie füge ich die Spalten hinzu, in denen außer der ersten keine anderen Spalten vorhanden sind?
Antwort1
Testen Sie zunächst, ob die aktuelle Zeile ein Tabulatorzeichen enthält oder nicht, und führen Sie die Ersetzung nur durch, wenn dies nicht der Fall ist:
sed -i '/\t/!s/$/\t1.2\tA/' file
Hier adressieren wir alle Zeilen, die kein Tabulatorzeichen enthalten, /\t/!
und wenden die Ersetzung auf diese Zeilen an.
Das Obige setzt voraus, dass GNU in der Lage ist , als Tabulatorzeichen sed
zu erkennen . Andere Implementierungen müssen möglicherweise anstelle von ein wörtliches Tabulatorzeichen verwenden . Andere Implementierungen handhaben die Option möglicherweise auch anders als GNU (siehe „\t
sed
\t
sed
-i
sed
Wie kann ich mit sed -i (In-Place-Bearbeitung) Portabilität erreichen?").
Verwendung von awk
:
awk -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
Dadurch wird die Anzahl der durch Tabulatoren getrennten Felder getestet. Wenn nur ein einziges Feld vorhanden ist, wird vor dem Drucken der Zeile ein neues zweites und drittes Feld hinzugefügt.
Dadurch wird die Datei nicht direkt geändert. Verwenden Sie dazu GNU awk
wie folgt:
awk -i inplace -F "\t" 'BEGIN { OFS=FS } NF == 1 { $2 = "1.2"; $3 = "A" }; 1' file
Weitere Informationen zu awk
und zu Bearbeitungen vor Ort finden Sie unter "Wie kann ich eine Datei mit awk dauerhaft ändern? („In-Place“-Änderungen, wie mit „sed -i“)".