Para extrair as linhas de data.txt com os genes listados em genelist.txt :
grep -w -F -f genelist.txt data.txt > newdata.txt
grep opções usadas:
-
-winformagreppara corresponder somente palavras inteiras (por exemplo,ABC123também não corresponderá aABC1234). -
-Fprocura por sequências fixas (texto simples) em vez de expressões regulares -
-f genelist.txtleu padrões de pesquisa do arquivo
Se você quiser também a linha de cabeçalho (Amostra 1, Amostra 2, etc):
grep -w -F -f genelist.txt -e Sample data.txt > newdata.txt
-
-e Sampletambém procura "Amostra"
Para encontrar linhas em genelist.txt que não estão em newdata.txt :
grep -v -w -F -f <(sed -E -e 's/(\t| +).*//' newdata.txt) genelist.txt
-
-vinverte a pesquisa, imprime linhas não correspondentes.
O resto das opções do grep são as mesmas, mas ao invés de usar um arquivo com a opção -f , ele está usando algo chamado Substituição de processos (Consulte também ), que permite usar um comando no lugar de um arquivo real. Qualquer saída criada pelo comando é tratada como o conteúdo do "arquivo".
Nesse caso, estamos usando o comando sed -E -e 's/(\t| +).*//' newdata.txt , que produz cada linha de newdata.txt depois de excluir tudo primeiro do primeiro caractere TAB ou do primeiro par de espaços que ele vê. Em outras palavras, o primeiro campo (por exemplo, "Gene A"). Eu tive que usar TAB ou espaço duplo porque a) eu não tinha certeza se seus dados eram separados por espaços ou separados por TAB e b) os primeiros campos em seu exemplo continham espaços.
sed opções usadas:
-
-Eusam expressões regulares estendidas, portanto, podemos usar(,)e+simples, que são mais legíveis do que ter que escapar delas com\como\(,\),\+. -
-e 's/(\t| +).*//'especifica o script sed para ser aplicado à entrada (newdata.txt)
A execução desse comando em sua amostra data.txt produziria a seguinte saída:
$ sed -E -e 's/(\t| +).*//' data.txt
Gene A
Gene B
Gene C
Gene D
De qualquer forma, a saída desse comando sed é usada como a lista de padrões de pesquisa pelo comando grep .