2つの整数引数(最初の引数は2番目の引数より小さい)を取り、2つの整数引数の間の行を印刷します。

2つの整数引数(最初の引数は2番目の引数より小さい)を取り、2つの整数引数の間の行を印刷します。

最も一般的なパスワードとその頻度のリストがあります。これは、次の形式の長いリストです。

59462 password
49992 iloveyou
33919 princess
...   
30    yahoo123

明確に言えば、このリストによると、最も一般的なパスワードは "password"であり、59,462人がこのパスワードを持っています。 2番目に一般的なパスワードは「iloveyou」で、頻度は49,992です。

問題は、2つの整数入力を使用することです。最初は2番目より小さくなければなりません(スクリプトが確認する必要があります)。スクリプトは、少なくとも最初の数字と最大2番目の数字の頻度ですべてのパスワードを印刷する必要があります。

私はこの問題について約4時間閉じ込められ、完全に迷子になりました。

これが私が今まで得たものです:

var1=$1
var2=$2
if 
  [ $one -lt $two ]
then
  cat /home/misc/gwrika/cse251/hw3/short-rockyou.txt | awk '^$var1' | 
else
  echo "please enter the first argument as the smaller number and the second argument as the larger number"
fi

正直なところ、どうやって始めるのか分からない。

ベストアンサー1

私はこれを行うことができます:

low=$1
high=$2
if [ "$low" -lt "$high" ]
then
  awk -v low="$low"-v high="$high" '$1 >= low && $1 <= high { print substr($0, index($0, " ")+1) }' /home/misc/gwrika/cse251/hw3/short-rockyou.txt
else
  echo "please enter the first argument as the smaller number and the second argument as the larger number"
fi

変数の名前を変更しましたが、そのコアは下限と上限を渡してから、列1がその範囲内にあるかどうかを尋ねる単純なawkスクリプトです。そうであれば、2番目のフィールドを印刷します(最初のスペースの位置に探して、ちょうど渡します)。入力例のように、30 yahoo123パスワードと頻度を区別する複数のスペースがありますが、パスワードがすべて特定の列で始まる場合は、次のようにします。

awk ... print substr($0, 7) ...

その列から印刷を開始します。

おすすめ記事