次のテキストファイルをインポートする必要があります。
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スクリプトに渡す必要があります。
各シンボルに対して一度プログラムを実行したいと思います。この記号はナスダック株式記号です。スクリプトに引用符を含めようとしています。
このコマンドを手動で実行できました。
sh stock (symbol) > /home/user/Desktop/stockquote.txt
手動入力(記号)を使用するには、それを自動化するスクリプトが必要です。
答え1
各行を記号で処理してみましたか?
25項目をstocs.txtというファイルに入れます。次に、次のスクリプトを使用して株式ファイルの各行を繰り返し、同じスクリプトで宣言された株式関数を使用してコードを処理します。
while read symbol ; do
stock $symbol >> /home/user/Desktop/stockquote.txt
done < stocks.txt
答え2
明らかに、質問のタイトルと本文は私にとって同じではないようです。これには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
シンボルを処理する関数があります。関数を作成したくない場合は、関連するコード行をそこに入れてください。
外部ファイルのデータをパラメータとしてシェルスクリプトに渡します。
ㅏ関連ソリューションが公開ニューウルフ33。今修正して再現しました。
LOG_FILE=/home/user/Desktop/stockquote.txt
while read symbol
do
stock "$symbol" >> "$LOG_FILE"
done < input_file.txt
答え3
ファイルの行を繰り返すには、read
次のようにループに組み込み関数を使用できます。
while IFS= read -r line; do
echo "$line"
done <input_file.txt
行の内容は変数に保存されますline
(別の名前を選択できます)。バラよりIFSについて学ぶもっと説明したい。そうでない場合は、IFS=
先頭または末尾のスペースが削除され、これはあなたの場合に理想的かもしれません。
出力ファイルは>stockquote.txt
毎回切り捨てられます。完全なコマンドに入れるか、>>stockquote.txt
ファイルに追加するために使用します。を使用している場合は、>>
スクリプトの起動時にファイルが空でない可能性があることに注意してください。
このコードスニペットは各行に対してプログラムを実行し、各シンボル間の空行(引数なし)stock
に出力を保存します。stockquote.txt
echo
while read -r line; do
stock "$line"
echo
done <input_file.txt >stockquote.txt
実行可能であることを確認してくださいstock
。シェルスクリプトの場合は、次で終わる必要があります。#!/bin/sh
。 search path コマンドにない場合は、$PATH
パスを明示的に指定します (たとえば、./stock
現在のディレクトリにある場合)。
を使用することもできますが、xargs
入力構文が特別であることに注意してください。改行を区切り文字として使用せずにスペースを使用し、それを\'"
引用符で囲みます(デフォルトの入力構文の使用 - 状況をさらに悪化させるためにxargsには代替入力があります)コマンドラインオプションによって異なります。あなたのユースケースでは、これは適切で短いかもしれませんが、記号にスペースや引用符文字を含めたり、コメント行をスキップするなどの機会を失います。
xargs -n 1 stock <input_file.txt >stockquote.txt