2017-11-19 7 views
-1

こんにちは、私はLinuxのシェルスクリプトでコードを書いていますが、コードはキーボードからしか読んでいません。例えば、ファイルから読み込むように変更したいのですが./car.sh lamborghini.txt私はそれの最も高価なモデルです。このコードをファイルから読み取ろう

#!/bin/sh 
echo "Choose one of them" 
read manu 
sort -t';' -nrk3 auto.dat > auto1.dat 
grep $manu auto1.dat | head -n1 | cut -d';' -f2 

とauto.datファイルは、これらが含まれています:

Lamborghini;Aventador;700000 
Lamborghini;Urus;200000 
Tesla;ModelS;180000 
Tesla;ModelX;140000 
Ford;Mustang;300000 
Ford;Focus;20000 
+0

が含まれている必要がありますファイルは、コードやファイルの情報をフォーマットしてください。 –

+0

私は本当に質問を理解していません... – OznOg

+0

私はそれを書いた最初のコードを意味する高価なから高価なauto.datファイルをソートし、auto1.datファイルを送信し、私はテスラを書いて、それは私にテスラの高価なモデルを与えますが、私はそれを書いてほしくないです。例えば、私が書いたファイルから読みたいと思っています./car.sh lamborghini.txtそれは私にランボルギーニの高価なモデルを与えるはずです。 /car.sh tesla.txt like this – Frost

答えて

0

readコマンドは常に標準入力から読み込み

コードは次のようです。ファイルの内容を読むにはリダイレクト<を使用できます。

ファイルの内容

#!/bin/sh 
read manu < "$1" 
sort -t';' -nrk3 auto.dat | grep "$manu" | head -n1 | cut -d';' -f2 

から$manuを読むスクリプトのこのバージョンは、コマンドラインパラメータとしてファイル名を期待しています。ファイルの最初の行は$manuに格納されます。例:

./car.sh fileWithSelection.txt 

ファイルには、以前のスクリプトで入力したテキストが含まれている必要があります。私の意見では、コマンドラインパラメータ

から$manuを読む

、それは代わりにファイルを使用して、スクリプトに渡すの、直接コマンドラインパラメータを解釈するために、より理にかなって。

#!/bin/sh 
manu="$1" 
sort -t';' -nrk3 auto.dat | grep "$manu" | head -n1 | cut -d';' -f2 

例:

./car.sh "text you would have entered in your old script." 

+0

これは私のコードがキーボードからではなくファイルから読み込むのに役立ちますか? – Frost

+0

@Frostはい、最初のバージョンはキーボード入力を待つのではなくファイルを読み込みます。 – Socowi

0

あなたはこの方法を試すことができますが、Tesla.txtはテスラ

#!/bin/sh 
read manu < "$1" 
awk -F\; -vmod="$manu" ' 
    $1==mod{if($3>a){a=$3;b=$2}} 
    END{if(b){print "The more expensive "mod" is "b" at "a}}' auto.dat 
関連する問題