Você pode usar um tee
para gravar em um arquivo e stdout
:
chrN="chr1|chr2|chr3|chr4|chr5|chr6|chr7"
count_pos=$(otherCommands |
grep -Ew "$chrN" |
tee "$ChIP.bed" |
wc -l |
awk '{print 1000000/$1}')
Estou usando grep
no final de um conjunto de comandos canalizados para filtrar algumas linhas de um arquivo. Depois, vou querer fazer alguma aritmética com base no número de linhas restantes.
por exemplo.
chrN="chr1|chr2|chr3|chr4|chr5|chr6|chr7"
otherCommands | grep -Ew $chrN > $ChIP".bed"
count_pos='wc -l $ChIP"bed" | awk '{print 1000000/$1}''
Parece-me muito cansativo depois de juntar um monte de comando para depois escrevê-lo em um arquivo e depois lê-lo novamente apenas para coletar um número. .. mas eu não sei como fazer isso.
Então, minha pergunta é como salvar o número de linhas que passaram no filtro do grep para a variável count_pos
e salvar as linhas filtradas no arquivo também?
Faça tudo com o awk. Inicialize o contador, conte e imprima (grep + count) com correspondência de padrões e contagem de saída no final:
awk 'BEGIN { c=0} pattern{ c++; print $0 } END{ print 1000000/c }'
Você não precisa imprimir se não quiser. Ou você pode usar print $0 > output_file
dentro do awk para imprimir os resultados em um arquivo e contar com o stdout.