计算统计数据的程序以这种格式输出其数据
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,$
表示行范围)之后的每一行,并将行的开头 ( ^
) 替换为所需的值。所有这些都在将字符串保存到结果文件之前。