2016-12-13 2 views
1

配列データを処理して同じログファイルに出力する3つのループがあります。私はbashのコードを使用してタブで区切られた列に各ループの出力をソートしたい:bash内の列を別々の列に出力する

1 2 3 
1 2 3 
1 2 3 
1 2 3 
1 2 3 

注意:ループ1、ループ2及び3つのスタンドのコンテンツの2つのスタンドのコンテンツの1つのスタンドループ3の内容について。

declare -a Array1 
declare -a Array2 
declare -a Array3 

for ((i = 0 ; i < 9 ; i++)) 
do 
echo "${Array1[$i]}" 
done | tee -a log.txt 


for ((i = 0 ; i < 9 ; i++)) 
do 
echo "((${Array1[$i]}-${Array2[$i]}))" | bc 
done | tee -a log.txt 


for ((i = 0 ; i < 9 ; i++)) 
do 
echo "${Array3[$i]}" 
done | tee -a log.txt 

私はcolumnコマンドでいくつかのことを試みましたが、上で概説したようにうまくいかなかったのです。

+1

ループごとに異なるファイルを使用し、貼り付けて貼り付けます。 'patse log [1-9] .txt' – user000001

+0

@Joe Lo:すべての列を1つのループで印刷する予定ですか?または各列のループを分けるだけですか? – Inian

+0

@Indian:単一のループも可能です。 –

答えて

0

最も単純なオプションは、単一のループを使用することです。

もう1つの方法は、すでに得られている出力形式を列に変換することです。これはそれを行うための一つの方法です:

# Read the concatenated results into an array, $results 
IFS=$'\n' read -d '' -r -a results < log.txt 

# Print the concatenated results in columns 
for ((i=0 ; i<9; i++)) ; do 
    printf '%s\t%s\t%s\n' "${results[i]}" "${results[i+9]}" "${results[i+18]}" 
done 

あなたがlog.txtファイルを必要としない場合、あなたはちょうどあなたがそれらを計算すると(あなたが好きなだけのループを使用して)配列に結果を入れて、それらを印刷できその後。

関連する問題