Este é o seu script:
while read -r line
do
echo $line
sed -i "/$line/d" /my/path/ITS.OTU.table.tsv
done < /my/path/species.txt
A linha echo $ é mais para fins de depuração, portanto, remova-a eventualmente.
Eu tenho este script sed no qual estou trabalhando para excluir toda a linha da minha tabela do OTU quando as espécies listadas em um arquivo de texto são encontradas em minha tabela do OTU.
O script que tenho agora e que não funciona está abaixo, mas não consigo fazer funcionar. De qualquer forma, se você pudesse por favor me ajudar o mais rápido possível, seria muito apreciado.
(leia cada linha, procure por ela na minha tabela e exclua linha, infile)
for i in $(cat /my/path/species.txt); do
sed -i '/"$i"/d' /my/path/ITS.OTU.table.tsv
done
muito obrigado
grep -v -xF -f /my/path/species.txt /my/path/ITS.OTU.table.tsv >/my/path/ITS.OTU.table.tsv.new
Isso gravaria /my/path/ITS.OTU.table.tsv.new
. Seu conteúdo seria todas as linhas do arquivo original que não correspondem exatamente a uma linha em /my/path/species.txt
.
As opções -xF
forçam uma correspondência de linha completa idêntica à string e -f filename
lê as linhas para correspondência com o arquivo fornecido. O -v
inverte o sentido da correspondência para que apenas as linhas não correspondam sejam retornadas.
Se você precisar relaxar a correspondência para que uma sequência de caracteres lida de /my/path/species.txt
possa corresponder a em qualquer lugar em cada linha de /my/path/ITS.OTU.table.tsv
, remova a opção -x
.
Se você sabe onde em cada linha uma partida deve ser testada, pode-se usar awk
para comparar apenas esses dados, mas atualmente não sabemos como são seus dados.
Para o unix, como MacOS / BSD / Solaris, você precisa passar uma string vazia para sed
para evitar o problema que Emilie encontrou, então a resposta seria:
while read -r line
do
echo $line
sed -i "" "/$line/d" /my/path/ITS.OTU.table.tsv
done < /my/path/species.txt
Tags text-processing sed