1

以下の表を考えると、各行を別々に合計し、合計値の最高値と 2 番目に高い値を見つけ、対応する行にマーカーを配置します (最初の合計値の html タグなど: <b>num1</b>2 番目に高い値: <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
4

2 に答える 2

1
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
于 2012-04-18T14:40:58.933 に答える
1

下記参照:

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
于 2012-04-18T13:01:25.237 に答える