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