Попробуйте это,
sed -i 's/#\(.*\)7086/\18088/g' file_content
Здесь каждая вещь после #
и до 7086
группируется, а затем вся строка будет заменена на \1
(группа 1 или, скажем, регион 1 ) и требуемый порт 8088
вам понадобится цикл, который переходит ко всем столбцам
{ for(i=1;i<=NF;i++) ...
и массивам
... total[i]+=$i ; sq[i]+=$i*$i ; }
. Это результат в командной строке, например (для среднего)
awk '{ for(i=1;i<=NF;i++) total[i]+=$i ; }
END { for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;}'
. Я использую этот awk для вычисления среднего и дисперсии, однако результата у меня нет.
{ for(i=1;i<=NF;i++) {total[i]+=$i ; sq[i]+=$i*$i ; } }
END {
for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;
printf "\n" ;
for(i=1;i<=NF;i++) printf "%f ",sq[i]/NR-(total[i]/NR)**2 ;
printf "\n" ;
}
awk -F ',' '{print;x+=$2}END{print "MEAN" x/NR}' filename.csv
где $2
— второй столбец, а NR
— количество записей мы можем сохранить значения $2
в переменной x
Подход "C", основанный на документации . Вероятно, не так эффективно или чисто, как могло бы быть, но, возможно, легче читать. Вычисляет среднее значение и дисперсию для каждого столбца файлов данных, содержащих NxM элементов, разделенных пробелами.
#!/bin/awk -f
BEGIN { } {
if (max_nf < NF)
max_nf = NF
max_nr = NR
for (x = 1; x <= NF; x++)
mat[x, NR] = $x
} END {
for (x = 1; x <= max_nf; x++) {
mean = 0.0
var = 0.0
for (y = 1; y <= max_nr; y++) {
var += (y - 1) * (mat[x, y] - mean) * (mat[x, y] - mean) / y
mean += (mat[x, y] - mean) / y
}
printf("%f %f\n", mean, var / (max_nr - 1))
}
}
Пример запуска:
./ColVarAndMean.awk dataset.csv > output.dat && cat output.dat
1.625000 0.839286
1.625000 1.410714
12.000000 0.285714
4.500000 6.000000
0.250000 0.214286
0.375000 0.553571
478791.500000 174812449479.714294