テキストファイルからbashスクリプトにデータをインポートする

テキストファイルからbashスクリプトにデータをインポートする

次のテキストファイルをインポートする必要があります。

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.txtecho

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

関連情報