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:
-
-w
informagrep
para corresponder somente palavras inteiras (por exemplo,ABC123
também não corresponderá aABC1234
). -
-F
procura por sequências fixas (texto simples) em vez de expressões regulares -
-f genelist.txt
leu 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 Sample
també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
-
-v
inverte 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:
-
-E
usam 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
.