tcshで特定の文字が発生した回数を見つける

tcshで特定の文字が発生した回数を見つける

ファイル名に "_"を含む特定の種類のファイルの数を見つけようとします。

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

ifステートメントが正しくないため、うまくいきませんが、txtファイルのファイル名に "_"があることを確認してから、nを1ずつ増やすように定義する方法がわかりません。

答え1

1つの方法は、grepの代わりにシェルのglobbing機能を使用することです。

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

他の理由で必要な場合、「if grep」構文は次のとおりです。

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

-qgrepに静かにして何も印刷しないように指示します。)

答え2

特定の文字を含むファイル名の数を取得するには、次のようにします。

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

見つかった文字を含むファイル名のみを印刷し、返された項目の数を数えます。 tcshでは、割り当ての前に実行する必要がありますset

答え3

このコマンドを一緒に使用して、名前に含まれるファイルの数をfind取得できます。wc_

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

[path]検索したいディレクトリに置き換えます。

関連情報