GNU/Linux >> Linux の 問題 >  >> Linux

コマンドへの引数としてテキストファイルの各行を解析する方法は?

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


Linux
  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. Linuxでテキストファイルに行番号を追加する方法

  3. Vimの各行の先頭にテキストを挿入する方法

  1. コマンドライン引数をシェルスクリプトに渡す方法は?

  2. テキストファイルの行を1行上または下に移動するにはどうすればよいですか?

  3. コマンドライン引数として渡されたパスワードを非表示にする方法は?

  1. Bash で、ファイルの各行の後に文字列を追加するにはどうすればよいですか?

  2. 端末でテキスト ファイルを編集する方法

  3. Linuxでjar内のファイルをコマンドラインに置き換える方法は?