스크립트 출력에 변수를 추가하는 방법은 무엇입니까?

스크립트 출력에 변수를 추가하는 방법은 무엇입니까?

통계를 계산하는 프로그램은 데이터를 이 형식으로 출력합니다.

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,$첫 번째 줄(줄 범위를 나타냄) 다음의 모든 줄을 읽고 ^줄의 시작 부분( )을 원하는 값으로 바꾸는 것입니다. 문자열을 결과 파일에 저장하기 전에 이 모든 작업을 수행합니다.

관련 정보