Как установить подмножество всех строк, которые соответствуют шаблону в заданных столбцах, используя Bash? - PullRequest
0 голосов
/ 31 октября 2018

Учитывая файл с разделителями табуляции:

1    cat      1|1    0|1    0|0    0|0
2    mouse    0|1    1|1    1|1    0|0
3    horse    0|1    0|1    1|1    1|0
4    dog      0|0    0|0    0|0    0|0
5    human    0|0    0|0    0|0    0|0

Как можно установить подмножество всех строк, которые имеют одну или несколько «1 | 1» только в последних трех столбцах? то есть подмножество должно вернуть:

2    mouse    0|1    1|1    1|1    0|0
3    horse    0|1    0|1    1|1    1|0

Файл, который мне нужен для поднабора, имеет 2500 столбцов и 100000 строк. Столбцы с 9 по 2500 содержат либо 0 | 0 1 | 1 1 | 0, либо 0 | 1. Как я могу установить все строки, которые имеют одну или несколько строк 1 | 1 в любом из столбцов от 9 до 2500, используя Bash?

Я пробовал:

awk '/^1|1$/' dummy.vcf > dummy.vcf1

Однако, похоже, это не работает. Кроме того, он рассматривает все столбцы в отличие от столбцов с 9 по 2500.

Если кто-то сможет помочь, он будет очень признателен!

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Это может быть то, что вы хотите:

$ awk '{ for (i=4;i<=NF;i++) if ($i == "1|1") { print; next } }' file
2    mouse    0|1    1|1    1|1    0|0
3    horse    0|1    0|1    1|1    1|0

Для ваших реальных данных просто измените 4 на 9:

awk '{ for (i=9;i<=NF;i++) if ($i == "1|1") { print; next } }' file

или данные вашего образца:

$ awk 'match($0,/^([^\t]+\t){3}.*1\|1/)' file
2       mouse   0|1     1|1     1|1     0|0
3       horse   0|1     0|1     1|1     1|0

и измените 3 на 8 для ваших реальных данных. Последнее предполагает, что в каждом поле есть ТОЛЬКО однозначные цифры с |, например, 11|10 не может быть.

0 голосов
/ 31 октября 2018

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

grep $'^\([^\t]*\t\)\{7\}.*\t1|1' file
  • $'' интерпретирует \t как вкладку
  • \{7\} означает, что предыдущий токен повторяется семь раз
  • [^\t]* соответствует не вкладкам ноль или более раз, то есть столбцы
  • ^ соответствует началу строки
  • .* здесь следует за семью предыдущими столбцами и сопровождается вкладкой, то есть после нее начинается не менее 9 столбца
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...