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

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

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

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

관련 정보