.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=
行の値の先頭と末尾のスペースを削除してもかまわない場合は、省略できます。