以下のようなテキストファイルをインポートする必要があります。
AMBI
CBNK
CCXI
CERE
CLACW
CNYD
DAEG
DLIA
DLLR
DNDN
DSGX
HAST
HIBB,
HPOL
IRDMZ
MARK
NEPT
NFEC
NINE
NRCIB
OMER
PLCC
PLPM
PSUN
UNTK
エントリは25個ありますが、bashスクリプトに渡す必要があります。
シンボルごとに1回ずつプログラムを実行したい。シンボルはナスダックの銘柄記号です。スクリプトで引用を引っ張ろうとしています。
私はこのコマンドを手動で行うことができました:
sh stock (symbol) > /home/user/Desktop/stockquote.txt
(記号)を手動で入力することにより、自動的に実行するスクリプトが必要です。
各行をシンボルとして読み取ろうとしていますか?
25のエントリがstocks.txtというファイルにあるようにします。次に、次のスクリプトを使用して、stocksファイルの各行を反復処理し、同じスクリプトで宣言されたstock関数を使用してシンボルを処理します。
while read symbol ; do
stock $symbol >> /home/user/Desktop/stockquote.txt
done < stocks.txt
どうやら、質問のタイトルと本文は私にはまったく同じようには見えませんでした。 2つのソリューションがあります。
外部ファイルからBashスクリプトへのデータのインポート:
ファイルを読み取り、その内容をエントリーとして配列に保管します。 (注:これは、テキストファイルの内容を考えると実現可能です。たとえば、ファイルのいずれかの行に引用符のない複数の単語がある場合、そのように形成された配列は希望)
declare -a symbols=($(cat input_file.txt | tr '\n' ' '))
次に、配列symbols
の項目を次のように反復します。
LOG_FILE=/home/user/Desktop/stockquote.txt
for symbol in ${symbols[@]}
do
# echo "Processing $symbol ..."
sh stock "$symbol" >> "$LOG_FILE"
done
実際、これをstockという名前のスクリプトに埋め込むことができます。 sh stock "$symbol"
上記のようなものに:
f_process "$symbol" >> "$LOG_FILE"
どこ f_process
はおそらくシンボルを処理する関数です。関数を記述したくない場合は、関連するコード行をそこに配置するだけです。
外部ファイルからデータを引数としてシェルスクリプトに渡す:
関連ソリューション は neowulf によってすでに投稿されています。修正してそれを再現しています:
LOG_FILE=/home/user/Desktop/stockquote.txt
while read symbol
do
stock "$symbol" >> "$LOG_FILE"
done < input_file.txt
ファイルの行をループしたい場合は、次のようなループでread
ビルトインを使用できます。
while IFS= read -r line; do
echo "$line"
done <input_file.txt
行の内容は変数line
に格納されます(他の名前を選択できます)。詳細については IFSについて を参照してください。 IFS=
がない場合は、先頭または末尾の空白が削除されます。これは、場合によっては望ましいかもしれません。
>stockquote.txt
は毎回出力ファイルを切り捨てることに注意してください。コマンド全体を囲むか、ファイルに追加する>>stockquote.txt
を使用します。 >>
を使用する場合は、スクリプトの起動時にファイルが空にならないように注意してください。
このスニペットは、各行に対してプログラムstock
を実行し、各記号の間に空白行(引数なしのecho
)を付けてstockquote.txt
に出力を格納します。
while read -r line; do
stock "$line"
echo
done <input_file.txt >stockquote.txt
stock
が実行可能であることを確認してください。シェルスクリプトの場合は、 #!/bin/sh
で始まることを確認してください。コマンド検索パス$PATH
にない場合は、パスを明示的に指定します(たとえば、現在のディレクトリにある場合は./stock
)。
xargs
を使用することもできますが、その入力構文は特殊です。改行を区切り文字として使用せず、空白文字を使用し、\'"
を引用文字として扱います(デフォルトの入力構文では、さらに悪いことに、xargsには、コマンドラインオプションに応じて代替入力構文があります。ユースケースでは、これもおそらく適切であり、短くなりますが、記号に空白文字や引用符文字を入れたり、コメント行をスキップしたりする機会が失われます。
xargs -n 1 stock <input_file.txt >stockquote.txt