如何為腳本輸出新增變數?

如何為腳本輸出新增變數?

計算統計數據的程式以這種格式輸出其數據

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,$表示行範圍)之後的每一行,並將行的開頭 ( ^) 替換為所需的值。所有這些都在將字串保存到結果文件之前。

相關內容