1

jtn216_<n>.o<m>wherenおよびmintegerという名前のファイルがたくさんあります。1 つ目は私が割り当て、2 つ目はシステムによって割り当てられます。各ファイルの最後の行を確認する必要があります。これを実行して、その行を配列に分割しました

for i in {361..380}; do 
  v=$(tail -n 1 jtn216_$i.o*)
  IFS=' ' read -ra line <<< "$v"
  echo $line $v 
done

3499200 3499200 87650.5574975270 13.6931802555886 1014400 1014400 87947.4382620423 13.9208064005841 3475800 3475800 87779.1695691355 13.8939964916376 3479200 3479200 87459.7284508034 13.7824644675699 3827800
3827800 87868.7538056652 13.8792123626210 2551600 2551600 87615.6417285010 13.8700006744178 3818400 3818400
87872.1788028955 13.8942371285402 3476800 3476800
87842.0543708163 13.9170342642747 3481800
3481800 87670.5841054385
13.8808556469308 2559200 2559200
87800.6530231416 13.8874423695824
3841600 3841600
87804.3972028423 13.8657419719638
916400
916400
87776.1342228681 13.8622746230494
3839000 3839000 87662.8185016707 13.8576498806465
3835200 3835200 87933.6917697832 14.0007327053153 3482000 3482000 88323.3509854563 13.9453990979062 3485400 3485400 87657.5078357100 13.8478805156354 3484800 3484800
87757.3379321554 13.8215034461609 3475400 3475400
87970.4729449120 13.9605031841208
3481800 3481800
87612.4211302676
13.8327950845915 2319400
2319400 87521.5669854330 13.8383953325475

lineからの最初の値ではなく、配列であると予想していましたv。私は何を間違っていますか?

4

4 に答える 4

3

line間違って印刷しているだけだと思います。echo "${line[@]}"代わりに試してください。

于 2013-08-06T13:09:48.577 に答える
3

配列変数 $line の内容を適切にアドレス指定する必要があります。

echo "${line[0]}"
echo "${line[*]}"  # converts to a single string
echo "${line[@]}"  # converts to multiple elements i.e. multiple arguments for echo

配列変数がインデックスなしでアドレス指定される場合、最初の要素を取得することと同じです。

于 2013-08-06T13:10:19.700 に答える
1

最後の行を配列として取得する場合は、次を試してください。

v=(`tail -n 1 jtn216_$i.o*`)

更新しました

line配列として累積するには:

v=(`tail -n 1 jtn216_$i.o*`)
line+=(${v[@]})

配列全体を出力するには:

${line[@]}また${line[*]}

配列要素の数を数えるには:

${#line[@]}また${#line[*]}

于 2013-08-06T13:22:42.483 に答える