Por que não tenho permissão para colocar parênteses no meu loop for?

2

Meu código é:

dnafile=$1

for seq in (fold -w3 $dnafile | uniq); do
              fold -w3 $dnafile | grep $seq | wc -l
              echo $seq
              echo '(new line)'
done

Eu recebo o erro:

syntax error near unexpected token '('
    
por Tomasz 06.10.2017 / 21:33

2 respostas

3

Parece que você quer apenas contar o número de linhas exclusivas resultantes de fold -w3 $dnafile . Isso pode ser feito sem um loop:

fold -w3 "$dnafile" | sort | uniq -c

O sort classificaria as linhas da saída de fold , enquanto uniq -c contaria o número de vezes que cada linha ocorre consecutivamente.

A saída será uma linha para cada linha exclusiva no resultado fold prefixado com um número.

O erro de sintaxe vem do fato de que uma substituição de comando (ou seja, uma construção que é substituída pela saída de um comando) precisa se parecer com $( ... ) . Não tenho certeza se inserir o $ ausente realmente fará seu código funcionar, já que o shell ainda dividirá o texto resultante em novas linhas e espaços, mas como não sabemos como são os dados de entrada, é difícil especular .

Ter um sub-shell, (...) , em um loop for nessa posição não é permitido.

    
por 06.10.2017 / 21:42
1

Você perdeu o $ por (fold -w3 $dnafile | uniq) . Tente isto: $(fold -w3 $dnafile | uniq) .

$() é a sintaxe para substituição de comandos, enquanto () introduz uma subshell.

    
por 06.10.2017 / 21:37