.txtを使用するスクリプトを作成しようとしています 引数としてfilenameを使用し、ファイルを1行ずつ読み取り、各行をコマンドに渡します。たとえば、command --option "LINE 1"を実行します。 、次にcommand --option "LINE 2" 、など。コマンドの出力は別のファイルに書き込まれます。どうすればそれを行うことができますか?どこから始めればいいのかわかりません。
承認された回答:
読み取り中にwhile read ループ:
: > another_file ## Truncate file.
while IFS= read -r LINE; do
command --option "$LINE" >> another_file
done < file
もう1つは、出力をブロックごとにリダイレクトすることです。
while IFS= read -r LINE; do
command --option "$LINE"
done < file > another_file
最後はファイルを開くことです:
exec 4> another_file
while IFS= read -r LINE; do
command --option "$LINE" >&4
echo xyz ## Another optional command that sends output to stdout.
done < file
コマンドの1つが入力を読み取る場合、コマンドがそれを食べないように、入力に別のfdを使用することをお勧めします(ここではkshを想定しています) 、zsh またはbash -u 3の場合 、<&3を使用します 代わりに移植可能):
while IFS= read -ru 3 LINE; do
...
done 3< file
最後に、引数を受け入れるには、次の操作を実行できます。
#!/bin/bash
FILE=$1
ANOTHER_FILE=$2
exec 4> "$ANOTHER_FILE"
while IFS= read -ru 3 LINE; do
command --option "$LINE" >&4
done 3< "$FILE"
どちらを実行できるか:
bash script.sh file another_file
追加のアイデア。 bashを使用 、readarrayを使用します :
readarray -t LINES < "$FILE"
for LINE in "${LINES[@]}"; do
...
done
注:IFS= 行の値の先頭と末尾のスペースを削除してもかまわない場合は、省略できます。