带有标签最高值的标签
问题描述:
鉴于下表,我想分别总结每一行,找出哪个是总计值的最高值和第二高值,并在相应的行中放置一个标记(例如,一个html标签,第一个加和值:<b>num1</b>
和第二最高值:<i>num2</i>
):带有标签最高值的标签
cat input.txt
0.743745 0.00145661
0.740159 0.00208729
0.743907 0.0019944
0.769515 0.0051214
0.768735 0.00453603
0.755945 0.00203796
如果我们总结一下输入文件的每一行,我们将获得以下值:
0.7452
0.7422
0.7459
0.7746
0.7733
0.7580
给定这些计算值,所期望的输出应为:
cat output.txt
0.743745 0.00145661
0.740159 0.00208729
0.743907 0.0019944
<b>0.769515 0.0051214</b>
<i>0.768735 0.00453603</i>
0.755945 0.00203796
答
见下文:
kent$ cat test
0.743745 0.00145661
0.740159 0.00208729
0.743907 0.0019944
0.769515 0.0051214
0.768735 0.00453603
0.755945 0.00203796
kent$ awk '{a[NR]=$0;s=$1+$2;
if(m==""||s>m){m=s;mr=NR; }
if(n==""||(s>n&&s<m)){n=s;nr=NR;} }
END{for(i=1;i<=NR;i++)if(i==mr) print "<b>"a[i]"</b>"
else if(i==nr) print "<i>"a[i]"</i>"
else print a[i]}' test
0.743745 0.00145661
0.740159 0.00208729
0.743907 0.0019944
<b>0.769515 0.0051214</b>
<i>0.768735 0.00453603</i>
0.755945 0.00203796
答
awk '{print NR"\t"$0"\t"$1+$2}' input.txt |
sort -k3gr |
sed -r -e '1s#\t(.*)\t#\t<b>\1</b>\t#' -e '2s#\t(.*)\t#\t<i>\1</i>\t#' |
sort -n |
cut -f2
0.743745 0.00145661
0.740159 0.00208729
0.743907 0.0019944
<b>0.769515 0.0051214</b>
<i>0.768735 0.00453603</i>
0.755945 0.00203796
基本上创建具有和的新的数组,使用BC,AWK或该连结[ 1]进行浮动操作。在总结时使用2个其他变量来找出2个最大值。然后你知道原始数组中哪些行最大。但别指望别人写作业。 [1] http://www.linuxjournal.com/content/floating-point-math-bash – akostadinov 2012-04-18 13:01:26
+1对于良好的格式化,样本输入,样本输出,问题描述,错误...示例代码?哦,不能拥有一切。祝你好运。 – shellter 2012-04-19 03:13:11