2016-05-11 18 views
1

Ich muss jede Zeile entfernen, die Wert wie SUPMA in der 4. Spalte hat.BASH - Löschen bestimmter Zeilen

Meine Daten sieht wie folgt aus:

abc;def;ghi;SUPMA;klm 
abc;def;ghi;SUPMA;klm 
SUPMA;def;ghi;MA;klm 
abc;def;ghi;SUPMA;klm 
abc;def;ghi;SUP;klm 

In diesem Beispiel habe ich den 3. und 5. Linien halten wollen.

Wie kann ich das im Bash-Skript tun? Kann ich AWK benutzen?

Dank

+2

Ja, und ja. Was hast du probiert? – bishop

Antwort

2
awk -F";" '$4!="SUPMA"' yourfile.txt 

Hier awk spaltet die Datensätze durch Semikolon, für SUPMA die 4. Position testet dann. Wenn diese Bedingung besteht, wird standardmäßig die Zeile gedruckt.

+0

Aktualisiert, damit das Semikolon in seinem glücklichen Platz ist. – JNevill

+0

Danke. In Wirklichkeit ist der SUPMA-Wert eine Variable. Also, kann ich Ihren Befehl mit einer Variablen verwenden? – Julien

+0

Um eine bash-Variable in Ihrem awk zu verwenden, müssen Sie sie mit dem '-v'-Flag übergeben:' awk -F; " -v awkvar = $ bashvar '$ 4! = awkvar'' – JNevill

1
awk -F\; '$4 !~/SUPMA/' file 
    SUPMA;def;ghi;MA;klm 
    abc;def;ghi;SUP;klm