두 개의 정수 인수(첫 번째 인수는 두 번째 인수보다 작음)를 취하고 두 정수 인수 사이의 줄을 인쇄합니다.

두 개의 정수 인수(첫 번째 인수는 두 번째 인수보다 작음)를 취하고 두 정수 인수 사이의 줄을 인쇄합니다.

가장 일반적인 비밀번호와 그 빈도에 대한 목록이 있습니다. 이는 다음과 같은 형식의 긴 목록입니다.

59462 password
49992 iloveyou
33919 princess
...   
30    yahoo123

명확하게 말하면, 이 목록에 따르면 가장 일반적인 비밀번호는 "password"이며, 59,462명이 이 비밀번호를 가지고 있습니다. 두 번째로 흔한 비밀번호는 "iloveyou"로 빈도는 49,992입니다.

문제는 두 개의 정수 입력을 사용하는 것입니다. 첫 번째는 두 번째보다 작아야 합니다(스크립트가 확인해야 함). 스크립트는 최소한 첫 번째 숫자와 최대 두 번째 숫자의 빈도로 모든 비밀번호를 인쇄해야 합니다.

나는 이 문제에 대해 약 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 스크립트입니다. 그렇다면 두 번째 필드를 인쇄합니다(첫 번째 공백의 위치로 찾고 그냥 넘어가). 입력 예에서와 같이 30 yahoo123비밀번호와 빈도를 구분하는 공백이 여러 개 있지만 비밀번호가 모두 특정 열에서 시작하는 경우 다음을 사용하세요.

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

해당 열에서 인쇄를 시작하십시오.

관련 정보