Как добавить переменные в вывод скрипта?

Как добавить переменные в вывод скрипта?

Программа для расчета статистики выводит свои данные в таком формате

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вообще не используются.

EDIT: Ах, в таком случае вы могли бы использовать 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,$обозначает диапазон строк) и заменяет начало строки ( ^) на нужные значения. Все это происходит непосредственно перед сохранением строки в файле результатов.

Связанный контент