фильтр по первым двум буквам столбца - PullRequest
4 голосов
/ 29 марта 2019

У меня есть файл, который выглядит так:

345-103832 OI.S.15.0FKOGO   
345-103832 OX.S.5.0FKOGO   
345-103832 QX.S.3.0FKOGO  
345-103832 Qa.S.21.0FKOGO  
345-114643 IX.S.13.0FKOGY

Мне нужно напечатать все строки, чтобы столбец 2 не начинался с «O», с «I» или «O» или «I» как часть первых двух букв.

Итак, я бы хотел что-то вроде:

awk '{ if( $2 != * O. || $2 != O *. || $2 != * I. || $2 != I *.) print $0}' ...

Таким образом, что результат должен быть:

345-103832 QX.S.3.0FKOGO  
345-103832 Qa.S.21.0FKOGO

Можете ли вы помочь мне в этом?

1 Ответ

3 голосов
/ 29 марта 2019

Вы можете использовать

awk '$2 !~ /^.?[OI]/' file

См. awk онлайн-демонстрацию .

'$2 !~ /^.?[OI]/' означает: печатать все строки, где поле 2 не совпадает:

  • ^ - начало строки
  • .? - любой 1 необязательный символ
  • [OI] - либо O, либо I.

Первые две буквы должны быть буквами, замените . на [[:alpha:]] или [A-Z], просто выберите то, что лучше всего соответствует вашим требованиям.

...