Windows linux中多个文件或一行中每三行的平均ad标准偏差

Windows linux中多个文件或一行中每三行的平均ad标准偏差,windows,bash,Windows,Bash,我的操作系统是Windows10,我在windows上使用bash来执行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

我的操作系统是Windows10,我在windows上使用bash来执行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
像foreach和awk这样的tcsh命令可以用于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 

使用这个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
  }
}
“Bash脚本”(foo.sh):


请在您的帖子中发布预期的输出,然后让我们知道。当averageX是第X个三行文件的平均值时,您是否想要sum(average1,average2,…,averageX)?@expert:为什么要标记这个
bash
shell
,但在您的帖子中您提到的是
tcsh
?我的操作系统是windows 10,因此,我正在使用bashIt,使用awk编写脚本可能更合适。感谢you@expert:这对你/回答你的问题有帮助吗?如果是的话,考虑一下我的答案。如果您需要进一步的建议,请告诉我。如何为bash shell编写这些命令或为sh保存这些命令。?我想为在bash中执行编写脚本。@expert:在上面的帖子中,您编写了awk。这就是我提供awk脚本的原因。安装Windows 10时是否有awk可用?(可能是通过Cygwin?)谢谢您的回复。但我更喜欢这样:
mean     stand.D
31.8867 0.411204
20.9367 0.0249444
22.52   0.0489898
20.49   0.188326
#!/bin/bash

# data.txt is Single File
awk -F " " -f script.awk data.txt