2016-12-13 1 views
1

Ich habe drei Schleifen, die Array-Daten verarbeiten und in derselben Protokolldatei drucken. Ich mag den Ausgang jeder Schleife in Spalten sortieren, die durch Tabulatoren getrennt sind bash Code verwendet:Ausgabe von Daten im Loop-Array zur Trennung von Spalten in der Bash

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

Hinweis: 1 steht für den Inhalt der Schleife 1, 2 steht für den Inhalt der Schleife 2 und 3 stehen für den Inhalt der Schleife 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 

habe ich versucht, ein paar Sachen mit der Spalte Befehl, aber es funktioniert nicht, wie oben beschrieben.

+1

Verwenden Sie für jede Schleife eine andere Datei, und verbinden Sie sie dann mit Einfügen: 'patse log [1-9] .txt' – user000001

+0

@Joe Lo: Planen Sie, eine einzelne Schleife zu verwenden, um alle Spalten zu drucken? oder einfach eine Schleife für jede Spalte? – Inian

+0

@Indian: Eine einzelne Schleife wäre auch möglich. –

Antwort

0

Die einfachste Option kann die Verwendung einer einzelnen Schleife sein.

Eine Alternative besteht darin, das bereits vorhandene Ausgabeformat in Spalten umzuwandeln. Dies ist eine Möglichkeit, es zu tun:

# 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 

Wenn Sie die log.txt Datei nicht benötigen, können Sie nur die Ergebnisse in ein Array setzen, wie Sie sie berechnen (mit so vielen Schleifen, wie Sie möchten) und ausdrucken danach.

Verwandte Themen