Это входной файл input.awk типа DOSAWK неправильно математике на первой линии только
06-13-2014,08:43:11
RLS007817
RRC001021
yes,71.61673,0,150,37,1
no,11,156,1.35,306.418
4,3,-1,2.5165,20,-1.4204
-4,0,11,0,0,0
1.00E-001,0.2,3.00E-001,0.6786031,0.5,6.37E-002
110,40,30,222,200,-539
120,50,35,215,220,-547
130,60,40,207,240,-553
140,70,45,196,260,-560
150,80,50,184,280,-566
160,90,55,170,300,-573
170,100,60,157,320,-578
180,110,65,141,340,-582
190,120,70,126,360,-586
200,130,75,110,380,-590
Это то, что я в основном нужно:
- Пропустить первые 8 строк (OK)
- Комплектование и разделить число на линиях 6,7 & 8 (OK)
- Do AWK математику на колонках (Ошибка только в первой строке?)
BASH код
#!/bin/bash
myfile="input.awk"
vzeros=$(sed '6q;d' $myfile)
vshift=$(sed '7q;d' $myfile)
vcalib=$(sed '8q;d' $myfile)
IFS=','
read -a avz <<< "${vzeros}"
read -a avs <<< "${vshift}"
read -a avc <<< "${vcalib}"
z1=${avz[0]};s1=${avs[0]};c1=${avc[0]}
z2=${avz[1]};s2=${avs[1]};c2=${avc[1]}
z3=${avz[2]};s3=${avs[2]};c3=${avc[2]}
z4=${avz[4]};s4=${avs[4]};c4=${avc[4]}
#The single variables will be passed to awk
awk -v z1="$z1" -v c1="$c1" -v s1="$s1" -v z2="$z2" -v c2="$c2" -v s2="$s2" -v z3="$z3" -v c3="$c3" -v s3="$s3" -v z4="$z4" -v c4="$c4" -v s4="$s4" 'NR>8 { FS = "," ;
nc1 = c1 * ($1 - z1 - s1);
nc2 = c2 * ($2 - z2 - s2);
nc3 = c3 * ($3 - z3 - s3);
nc4 = c4 * ($5 - z4 - s4);
print nc1,nc2,nc3,nc4 }' $myfile > test.plot
Это результат на файловом test.plot
11 -0.6 -3 -10
12 9.4 7.5 100
13 11.4 9 110
14 13.4 10.5 120
15 15.4 12 130
16 17.4 13.5 140
17 19.4 15 150
18 21.4 16.5 160
19 23.4 18 170
20 25.4 19.5 180
Это странная часть ... только в первой строке и после того, как в первом столбце все неправильно. .. И я понятия не имею, почему. Это ожидаемый результат файл:
11 7.4 6 90
12 9.4 7.5 100
13 11.4 9 110
14 13.4 10.5 120
15 15.4 12 130
16 17.4 13.5 140
17 19.4 15 150
18 21.4 16.5 160
19 23.4 18 170
20 25.4 19.5 180
Я напечатал поправочные коэффициенты, захваченные из линий 6,7 & 8 и все в порядке. Вся математика в порядке, кроме первой строки, после первой колонки.
ОС: Slackware 13.37.
AWK: GNU Awk 3.1.6 Авторское право (C) 1989, 1991-2007 Фонд свободного программного обеспечения.
Это сделает ваш вопрос более ясным (и поможет вам отлаживать), если вы сосредоточились только на той части, которая не работает, и удалила остальные. –
вы говорите, игнорируете первые 8 строк, но тогда вы получаете значения из строк 6,7,8? Вы имеете в виду строки 8+ (6,7,8)? Кроме того, ваша ошибка состоит в том, что у вас есть отрицательное число, а ваши выражения - '$ 2 - z2 - s2', указывает, что одно или несколько из этих значений пустые. (Да, это странно, и сложная часть отладки в awk. Добавить «print» z2 = «z2» s2 ... 'Удачи. – shellter
Линии 6,7,8 содержат 6 столбцов с нулем, сдвигом и усилением Эти значения могут быть положительными или отрицательными. Массив Sed и Bash достаточно, чтобы забрать те, которые становятся z1 ... z4, c1..c4 и s1..s4. Даже с положительной, отрицательной и технической нотацией AWK делает это ПРАВО на всех линии, но сначала ... И первый столбец всегда в порядке! – Andreluiz