ソリューション1

ソリューション1

次のように、多くの行と5つの数値列を含むファイルがあります。

1  2  3  4  5   
6  7  8  9  10   
11 12 13 14 15   
16 17 18 19 20   
21 22 23 24 25   
...

1行目と3行目の数字の合計をこの方法で取得するには:1 + 11、2 + 12、3 + 13、4 + 14、5 + 15これは私が最終的に見たいものは何をすべきかを意味し12 14 16 18 20 ます。それか。

ベストアンサー1

ソリューション1

#!/bin/bash
{ read -ra line1; read _; read -ra line3; }
for i in "${!line1[@]}"; do
  result+=("$(( ${line1[i]} + ${line3[i]} ))")
done
printf %s\\n "${result[*]}"

例:

$ bash script < yourfilename
12 14 16 18 20
$ 

スクリプトの説明

{ read -ra line1; read _; read -ra line3; } この部分はファイルの最初の3行を読み取り、最初の2行だけを保持します。また、配列line1とline3に分割します。標準入力からのデータストリーミングを想定します。これを行う方法の例を参照してください。

for i in "${!line1[@]}"; do result+=("$(( ${line1[i]} + ${line3[i]} ))"); done この部分は、2つの配列のうちの1つの要素を繰り返し、line1とline2の同じ要素を合計します。結果は、resultという名前の新しい配列に保存されます。

printf %s\\n "${result[*]}" 計算された配列要素をスペースで区切って印刷します。


ソリューション2

入力に必要に応じて5つの列があると仮定してループを防ぐもう1つの解決策は次のとおりです。

#!/bin/bash
{ read a b c d e; read _; read v w x y z; }
echo "$((a+v)) $((b+w)) $((c+x)) $((d+y)) $((e+z))"

例:

$ cat yourfilename
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
...
$ bash script < yourfilename
12 14 16 18 20
$ 

スクリプトの説明

{ read a b c d e; read _; read v w x y z; } 1行(または3行)の数字を変数a〜e(またはv〜z)として読み込みます。

echo "$((a+v)) $((b+w)) $((c+x)) $((d+y)) $((e+z))" 要求時にスペースで区切られた変数の合計を印刷します。

おすすめ記事