Разрыв длинных строк с помощью операторов сравнения в сценарии оболочки

Это работает с mawk :

awk 'NR==1{$7="G";print;next} \
  $3~/^[A,C,G,T]$/ || $4~/^[A,C,G,T]$/ {$7="P"} \
  $3~/^[I,D,R]$/ || $4~/^[I,D,R]$/ {$7="Q"} \
  $4~/[A-Z][A-Z]/ || $3~/[A-Z][A-Z]/ {$7="Q"} 1' file
  1. строка: В первой строке запишите G в заголовок.
  2. строка: Если $3 из $4 являются A, C, G или T, то $7 равно P .
  3. строка: Если $3 из $4 равны I, D или R, то $7 равно Q .
  4. строка: Если $3 из $4 больше одной Буквы, то $7 равно Q . 1 в конце печатает все строки.
-121--216942-

Используйте следующее:

awk -F, '($2==1000 && $4!="A") || ($2==1001 && $4!="B") || ($2==1002 && $4!="C")' file

В криволинейных ветвях находятся 3 условия; если один из них применим, строка будет напечатана. Условия внутри скобок связаны с И, поэтому должны применяться оба условия.

-121--95488-

Вы можете сделать это с помощью egrep :

egrep -v '.*,((1000,.*,A)|(1001,.*,B)|(1002,.*,C))' filename

Будет соответствовать всем строкам, которые не имеют 2-го столбца с 1000 и 4-го с A, 2-го с 1001 и 4-го с B или 2-го с 1002 и 3-го с C.

3
28.12.2017, 11:22
0 ответов

Теги

Похожие вопросы