Ein Programm zur Berechnung von Statistiken gibt seine Daten in diesem Format aus
Calc_Statistics -input_data
zone|label|non_null_cells|null_cells|min|max|range|mean|mean_of_abs|stddev|variance|coeff_var|sum|sum_abs
1|Category 1|2340|6|0.281038027256727|0.462105994578451|0.181067967321724|0.408569300865444|0.408569300865444|0.0272405706818114|0.000742048691070761|6.66730726564858|956.0521640251|956.0521640251
2|Category 2|1504|11|0.231816699029878|0.428150941850618|0.19633424282074|0.368851480689277|0.368851480689277|0.0237446334053689|0.000563807615555358|6.43745101985139|554.7526269567|554.7526269567
...
...
n
Ich weiß, wie ich mit dem Schnitt die gewünschten Werte auswählen kann
calc_statistics -input_data | cut -f1,2,34 -d'|'
und ich bekomme so etwas:
zone|label|non_null_cells|null_cells
1|Category 1|2340|6
2|Category 2|1504|11
Und ich möchte es für eine Sammlung von Eingaben ausführen, zum Beispiel:
for year in years:
do
for month in months:
do
calc_statistics -input_data $year$month_data | cut -f1,2,34 -d'|' >> results.txt
done
done
aber wie kann ich in jede Zeile die Variablen $year und $month einfügen, sodass das Ergebnis dem folgenden ähnelt?
2000|2|1|Category 1|2340|6
2000|2|2|Category 2|1504|11
Antwort1
Drucken Sie es separat. echo
Es reicht, eine Option ( -n
) zu haben, mit der das abschließende Newline-Fenster übersprungen wird:
for year in years:
do
for month in months:
do
echo -n "$year|$month|"
calc_statistics | cut -f1,2,34 -d'|' >> results.txt
done
done
Alternativ können Sie sie an übergeben calc_statistics
und sie auch ausdrucken lassen (und dann den cut
Aufruf entsprechend anpassen). Ihr Beispiel ist etwas seltsam, da sowohl $month
als auch $year
überhaupt nicht verwendet werden.
EDIT: Ah, in diesem Fall könnten Sie verwenden paste
, aber es ist viel einfacher, dies mit Textbearbeitungs-Apps zu tun. In meinem Fall sed
:
for year in years:
do
for month in months:
do
calc_statistics | cut -f1,2,34 -d'|' | sed "2,$ s/^/$year|$month|/" >> results.txt
done
done
Dabei wird jede Zeile nach der ersten ( 2,$
bezeichnet den Zeilenbereich) gelesen und der Zeilenanfang ( ^
) durch die gewünschten Werte ersetzt. Alles unmittelbar vor dem Speichern der Zeichenfolge in der Ergebnisdatei.