내 루프의 아이디어는 파일의 모든 줄의 첫 번째 숫자를 인쇄하는 것입니다. 파일은 다음과 같습니다.
256-56-8411 Bob 3.61 Junior CS
471-44-7458 Tim 3.45 Senior CE
326-56-4286 Rajesh 2.97 Freshman TE
548-66-1124 Eric 2.88 Sophomore EE
447-21-3599 John 2.51 Junior CS
911-41-1256 Rebecca 3.92 Senior CS
854-22-6372 Robin 2.45 Freshman TE
스크립트를 실행한 후의 출력은 다음과 같습니다.
This is a script that analyses student data from input file students.txt
----------------------------------------------------------------------
./student_script: line 8: 2
4
3
5
4
9
8: No such file or directory
7 is the number of students in the input file.
마지막으로 코드는 다음과 같습니다.
echo "This is a script that analyses student data from input file $1"
echo "----------------------------------------------------------------------"
studentCount=`wc -l < $1 `
tempFile=`cut -c1 $1`
while read n
do
echo "$n"
done < $tempFile
echo "$studentCount is the number of students in the input file."
이 문제를 해결한 후에는 while 루프를 사용하여 첫 번째 숫자가 4인지 아닌지 확인한 다음 4로 시작하지 않는 ID(첫 번째 열) 수를 명시할 계획입니다.
나는 내 접근 방식보다 더 깨끗한 솔루션에 대해 배우는 것을 꺼리지 않습니다. 그러나 이것은 수업을 위한 것이고 우리가 많은 것을 배웠다고 생각하지 않습니다. 여행 중에 awk와 유사한 내용을 많이 보았지만 아직 awk를 전혀 배우지 않았습니다.
하지만 네, 기본적으로 두 개의 추가 비트를 추가한 것을 제외하고는 루프에서 원하는 모든 데이터를 얻었습니다.
답변1
이 줄에 쓴 내용은 다음과 같습니다.
tempFile=`cut -c1 $1`
라는 파일을 생성하지 않습니다 tempFile
. 따라서 그 내용을 읽을 수 없습니다.
해당 줄을 다음과 같이 변경할 수 있습니다.
cut -c1 "$1" > tempFile
그리고 루프가 읽을 수 있도록 라는 파일이 tempFile
생성됩니다 . 변수가 null(존재하지 않음) 이므로 해당 루프에서는 while read
사용하지 마십시오 . ($ 없음)과 같은 것을 사용하십시오.$tempFile
$tempfile
done < tempFile
그러나 간단한 명령은 cut -c1 "$1"
소스 파일의 첫 번째 문자를 모두 작성하므로 다음을 실행하여 확인하십시오.
cut -c1 "sourcefile"
이를 알고 있으면 값을 보유하기 위해 tempFile이 필요하지 않으며 here 문서를 사용하십시오.
here 문서를 사용하고 스크립트의 다른 문제를 정리하십시오.
#!/bin/sh
echo "This is a script that analyses student data from input file $1"
echo "----------------------------------------------------------------------"
studentCount="$(wc -l < "$1" )"
while read n
do
echo "$n"
done <<-_avoid_a_file_
$(cut -c1 "$1")
_avoid_a_file_
echo "$studentCount is the number of students in the input file."
어떤 인터프리터가 코드를 실행해야 하는지 나타내기 위해 she-bang(#!)을 사용하는 것이 좋습니다. 이 경우에는 sh
에 대한 언급 때문에 당신이 원한다고 가정했습니다 Bourne shell
. 원래 Bourne 쉘은 꽤 오래되었으며(~1979) 최신 쉘(ksh, bash, mksh, zsh 등)에 많은 개선 사항이 추가되었습니다.