Encontrando um número de ocorrências de um determinado caractere no tcsh

2

Estou tentando encontrar o número de certos tipos de arquivos que possuem um '_' no nome do arquivo.

foreach txt ( 'ls *.txt')
set n=0
if(grep _ txt) then
@ n = n+1
endif
end

Não funciona como minha instrução if não está correta, mas não sei como definir dizendo se o arquivo txt tem um '_' dentro do nome do arquivo, então incremente n por 1.

    
por r0bb077 25.02.2012 / 13:06

3 respostas

1

Uma maneira de fazer isso seria usar os recursos de globalização do shell em vez de usar o grep.

set n=0
foreach txt (*_*.txt)
    @ n++
end

A sintaxe da coisa "if grep" se você precisava disso por outras razões seria:

if ( { grep -q _ $var } ) then
  ...
endif

( -q diz ao grep para ficar quieto e não imprimir nada.)

    
por 25.02.2012 / 15:07
0

Para obter o número de nomes de arquivos com um determinado caractere, use:

set n='ls *.txt | fgrep -c _'

Isso imprimirá apenas os nomes de arquivos que possuem o caractere encontrado e, em seguida, contará o número de entradas retornadas. No tcsh, você precisa prefixar as atribuições com set .

    
por 25.02.2012 / 15:10
0

Você pode usar o comando find em combinação com wc para obter o número de arquivos com _ no nome:

set n='find [path] -maxdepth 1 -name "*_*.txt" | wc -l'

Substitua [path] pelo diretório que você deseja pesquisar.

    
por 25.02.2012 / 16:14