2016-10-20 19 views
0

1つの引数(ディレクトリ名)をとり、そのディレクトリにランダムな単語を含む3つの.txtファイルが含まれているスクリプトを作成します。最初のファイルには、1ワード2番目の6ワードと3番目のファイルには3ワードが含まれています。単語の数が少ないファイルに名前と単語の量を表示したい。 これまでの私のコード:linuxで単語が最小のファイルを出力する方法

#! /bin/bash 
if [ $# -gt 0 ] 
then 
    cd $1 
    number=0 
    for i in * 
    do 
     var=($(wc -w $i)) 
     if [ $var -gt $number ] 
     then 
      number=$var 
     else 
     wc -w $i  
     fi 
    done 
else 
    echo "Please type the name of a directory" 
fi 
+2

あなたは何をしていますか? – 123

+0

最大の単語数に単語数を格納し、すべての繰り返しでファイルを追跡する変数も使用します。 – Inian

+0

if文。私はすべてのファイルとwc -wを比較したい。 –

答えて

1

使用wc単語、数値的にソートリストをカウント表示し、最初の要素を選択します。

#!/bin/sh 
dir=$1 
if [ -d "${dir}" ]; then 
    wc -w ${dir}/* | sort -n | head -1 
else 
    echo "usage: $0 <directory>" 1>&2 
    echo "  show file in directory with the fewest words" 1>&2 
    exit 1 
fi 

@Leonが指摘したように${dir}一部ファイル(いない空のディレクトリ)が含まれている場合、それが唯一のファイル(なしサブディレクトリ)が含まれている場合、上記にのみ正常に動作しますが。

もう少し複雑な解決策は、ファイルへの検査パスを制限するためにfindを使用することです。それを使ってサブディレクトリに移動することもできます:

find "${dir}" -type f -exec wc -w {} + | sort -n | head -1 
+1

クール溶液。 '$ {dir}'がファイルを持たないサブディレクトリを含んでいれば、ワード数が0であると出力します。 '$ {dir}'が ''であれば0を返します。 - '見つける。 -maxdepth 1 -type f -exec wc -w {} + |ソート-n |ヘッド-1 ' – Leon

関連する問題