2016-12-05 6 views
0
1 0.832936 
2 0.890475 
3 0.816155 
3 1.21183 
4 1.21881 
5 1.28013 
6 1.28479 
7 1.32075 
8 1.39582 
8 1.2462 
9 1.24566 
10 1.24029 
11 1.30685 
12 1.31264 
13 1.38061 

Я хочу объединить данные, чтобы сделать его похожим наОбъединение данных, чтобы сделать одну кривую

1 0.832936 
2 0.890475 
3 0.816155 
3 0.816155 
4 0.823135 
5 0.884455 
6 0.889115 
7 0.925075 
8 1.000145 
8 1.000145 
9 0.999605 
10 0.994235 
11 1.060795 
12 1.066585 
13 1.134555 

Здесь я использовал вне набор 0.3956 на $ 1 = 3 и вычитая его до $ 1 = 8. Аналогично, 0,2460 от $ 1 = 8 и экстраполируя его на $ 1 = 13.

Я использую скрипт bash с помощью awk и sed для управления этими точками данных, чтобы получить желаемый результат без каких-либо успехов. Поскольку я новичок в этом, это займет некоторое время, чтобы обдумать это.

Текущий сценарий выглядит следующим образом:

for i in {1,5} 
do 
echo "For C_$i hist" 

awk -v i=$i '{ 
    if(NR == i+2) p=0;p = $2; 
    if(NR == i+3) n=0;n = $2; 
    if(NR >= i+3 && NR <= i+8) 
    print $1 " " ($2 - (n-p)); 
    }' Input >> Output 
done 

Может кто-нибудь здесь предложить какое-либо решение автоматизировать этот расчет. Заранее спасибо

Cheers, Мохит

+1

Избавиться от контура оболочки и просто использовать сценарий AWK. См. [Why-is-use-a-shell-loop-to-process-text -emed-bad-practice] (http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop-to-process-text-thought-bad-practice) –

ответ

3

возможно более общий

$ awk 'p==$1 {d+=$2-p2} 
      {p=$1; p2=$2; printf "%d\t%.6f\n", $1, $2-d}' file 

1  0.832936 
2  0.890475 
3  0.816155 
3  0.816155 
4  0.823135 
5  0.884455 
6  0.889115 
7  0.925075 
8  1.000145 
8  1.000145 
9  0.999605 
10  0.994235 
11  1.060795 
12  1.066585 
13  1.134555 
+0

Спасибо за решение. Работает отлично. –

 Смежные вопросы

  • Нет связанных вопросов^_^