Wie füge ich der Skriptausgabe Variablen hinzu?

Wie füge ich der Skriptausgabe Variablen hinzu?

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. echoEs 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_statisticsund sie auch ausdrucken lassen (und dann den cutAufruf entsprechend anpassen). Ihr Beispiel ist etwas seltsam, da sowohl $monthals 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.

verwandte Informationen