区切り文字を使用して行を分割し、2つのフィールドを異なる変数に保存します。

区切り文字を使用して行を分割し、2つのフィールドを異なる変数に保存します。

複数行を含むテキストファイルがあります。ファイルを 1 行ずつ読み取るには while コマンドを使用します。別の変数に値を格納し、末尾のシェルスクリプトで使用する必要があります。

これ切るこのコマンドは、読み取った行ではなくファイル全体を区切ります。

my_file.txt:

d1:jobid1
id2:jobid2

以下のwhileループを使用してファイルを1行ずつ読み込んでいます。

while IFS= read -r line; do
    jobid=`cut -d: -f2`
    id=`cut -d: -f1`

#remaining shell-script dependent upon variables#

done < my_file.txt

my_file.txt各行のjobidとidを保存し、末尾のスクリプトを実行したいと思います。各行は新しい行です

変数に値を再帰的に格納するのに役立ちます。 1行ずつ読み、2つのフィールドを別々に分離して保存するより良い方法がある場合。

ベストアンサー1

cutデフォルトは標準入力から読み取ることです。コマンド置換では、標準入力はループの標準入力から継承されます(呼び出しに他の明示的な入力を提供しないためcut)。ループの標準入力は入力ファイルから出力されます。

その結果、ファイルの最初の行が読み取られ、最初の呼び出しで他のすべてのread行が読み取られますcut。したがって、変数の値はjobid改行で区切られたジョブID文字列になり、id変数は空になります。このループは、1回の反復中にのみ実行されます。

あなた利用できる、例えば、

id=$( printf '%s\n' "$line" | cut -d: -f1 )

# or: id=$( cut -d: -f1 <<<"$line" )
# (in shells that supports "here-strings")

しかし、これはよりクリーンで効率的であるため、必要ありません。

while IFS=: read -r id jobid; do
    # code that uses "$id" and "$jobid" goes here
done <my_file.txt

readこれは、入力データの1行を同時に複数の変数として読み取ることができることを利用します。コロンに設定すると、IFS行はコロンから分割され、最初のフィールドを読み取り、残りのフィールドidをから読み込みますjobidcutまったく電話する必要はありません。

おすすめ記事