2016-05-11 5 views
1

Мне нужно удалить каждую строку, которая имеет значение, как SUPMA в 4-й колонке.BASH - Удалить определенные строки

Мои данные выглядит следующим образом:

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 

В этом примере, я хочу, чтобы 3-й и 5-й линии.

Как я могу сделать это в скрипте bash? Могу ли я использовать AWK?

Благодаря

+2

Да, и да. Что вы пробовали? – bishop

ответ

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

Здесь AWK разделяет записи точкой с запятой, а затем проверяет 4-е место для SUPMA. По умолчанию, если это условие пройдет, оно распечатает строку.

+0

Обновлено так, что точка с запятой находится в этом счастливом месте. – JNevill

+0

Спасибо. В действительности значение «SUPMA» находится в переменной. Итак, могу ли я использовать вашу команду с переменной? – Julien

+0

Чтобы использовать переменную bash в вашем awk, вам нужно передать ее с помощью флага '-v':' awk -F ";" -v awkvar = $ bashvar '$ 4! = awkvar'' – JNevill

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