スクリプト出力に変数を追加するにはどうすればよいですか?

スクリプト出力に変数を追加するにはどうすればよいですか?

統計を計算するプログラムは、この形式でデータを出力します。

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

カットで必要な値を選択する方法を知っています

calc_statistics -input_data | cut -f1,2,34 -d'|'

そして次のような結果になります:

zone|label|non_null_cells|null_cells
1|Category 1|2340|6
2|Category 2|1504|11

そして、入力のコレクションに対してこれを実行したいとします。例:

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

しかし、各行に $year および $month 変数を追加して、結果が次のようになるようにするにはどうすればよいでしょうか?

2000|2|1|Category 1|2340|6
2000|2|2|Category 2|1504|11

答え1

別々に印刷します。末尾の改行をスキップするechoオプション ( ) があれば十分です。-n

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

あるいは、それらを に渡してcalc_statistics、それらも印刷するようにします (その後、呼び出しを適切に調整します)。 とはどちらもまったく使用されていないcutため、この例は少し奇妙です。$month$year

編集: ああ、その場合は を使うこともできますpasteが、テキスト編集アプリを使う方がはるかに簡単です。私の場合は です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

これは、最初の行 (2,$は行の範囲を示します) 以降の各行を読み取り、行の先頭 ( ^) を必要な値に置き換えます。すべて、文字列を結果ファイルに保存する直前に行われます。

関連情報