среднее отклонение в объявлении для нескольких файлов или каждых трех строк в одной строке в linux - PullRequest
0 голосов
/ 04 ноября 2019

Моя операционная система Windows 10, я использую bash на Windows для выполнения команд Linux. У меня есть файл с 96 строками, и у меня есть несколько файлов, которые покрывают каждые три строки этого файла, и я хочу добавить среднее и стандартное отклонение их в один файл построчно.

Отдельный файл

1 31.31
2 32.24
3 32.11
4 20.97
5 20.93
6 20.91
7 22.58
8 22.46
9 22.52
10 20.71
11 20.25
12 20.51

Файл 1

1 31.31
2 32.24
3 32.11

Файл 2

4 20.97
5 20.93
6 20.91

Файл 3

7 22.58
8 22.46
9 22.52

Прежде всего, я попытался разбить файл с подробным режимом на несколько файлов с помощью

grep -i 'Sample' Sample3.txt | awk '{print $5, $6}' | sed 's/\,/\./g' >> Sample4.txt | split -l3  Sample4.txt --verbose

Могут ли команды tcsh, такие как foreach и awk, использоваться для bashсценарии? мы можем сделать это в одном текстовом файле или нам нужно разделить этот файл на файлы?

Например, вывод может быть:

output.txt

mean      stand.D.
31.88667  0.50362      ----- first three rows mean and sd
20.93667  0.030        ----- second three rows mean and sd
22.52     0.06         ----- third three rows  mean and sd
etc       etc                etc 

1 Ответ

0 голосов
/ 04 ноября 2019

Как насчет использования этого сценария awk?

BEGIN {
  avg=0; j=0
  fname = "file_output.txt"
  printf "mean\t stand.D\n" > fname
}

{
  avg = avg + $2
  values[j] = $2
  j = j + 1
  if (NR % 3 == 0) {
    printf "%f\t", avg/3 > fname
    sd = 0
    for (k = 0; k < 3; k++) {
      sd = sd + (values[k]-avg/3)*(values[k]-avg/3)
    }
    printf "%f\n", sqrt(sd/3) > fname
    avg = 0; j = 0
  }
}

Вывод:

mean     stand.D
31.8867 0.411204
20.9367 0.0249444
22.52   0.0489898
20.49   0.188326

"Bash script" (foo.sh):

#!/bin/bash

# data.txt is Single File
awk -F " " -f script.awk data.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...