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