Ich habe eine CSV-Datei und muss sie in zwei Dateien herausfiltern, je nachdem, ob die letzte Spalte das Wort „ecDNA“ enthält. Ich habe bereits zwei weitere Kopien der Datei, die ich bearbeiten kann, ohne die Originaldatei zu ändern. Gibt es eine Möglichkeit, alle Zeilen, die nicht „ecDNA“ enthalten, aus einer Datei zu löschen und nur die Zeilen, die „ecDNA“ enthalten, aus einer anderen Kopie der Datei beizubehalten?
Antwort1
awk -F, '$NF ~ /ecDNA/' oldfile > newfile
NF ist die Anzahl der Felder (Spalten) in der aktuellen Eingabezeile, also ist $NF der Wert (Inhalt) des letzten Felds. Wenn $NF „ecDNA“ enthält, drucken Sie die Zeile. Andernfalls ignorieren Sie sie.
Wenn bei der Übereinstimmung die Groß-/Kleinschreibung nicht beachtet werden darf (und Sie GNU awk verwenden), verwenden Sie:
awk -F, -v IGNORECASE=1 '$NF ~ /ecDNA/' oldfile > newfile
Für die invertierte Übereinstimmung (Zeilen ohne ecDNA
im letzten Feld) negieren Sie den Bedingungsoperator:
awk -F, '$NF !~ /ecDNA/' oldfile > newfile2