私のループのアイデアは、ファイルの各行の最初の数字を印刷することです。ファイルは次のようになります。
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を学んでいません。
しかし、基本的に、2つの追加ビットを追加することを除いて、ループから必要なすべてのデータを取得します。
答え1
この行に書き込む内容は次のとおりです。
tempFile=`cut -c1 $1`
は名前のファイルを生成しないため、そのtempFile
ファイルの内容を読み取ることはできません。
この行を次のように変更できます。
cut -c1 "$1" > tempFile
tempFile
while read
そして、ループが読み取れるように名前付きファイルが作成されます。$tempFile
変数は$tempfile
null(存在しない)なので、そのループで使用しないでください。次のように使用してください($を除く)。
done < tempFile
ただし、単純なコマンドはcut -c1 "$1"
ソースファイルの最初の文字をすべて作成するため、次のコマンドを実行して確認してください。
cut -c1 "sourcefile"
これを知っていれば、値を保存するためにtempFileは必要ありません。ここの文書を使用してください。
ここのドキュメントを使用してスクリプトの他の問題をクリーンアップします。
#!/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など)に多くの改善が追加されました。