Windows linux中多个文件或一行中每三行的平均ad标准偏差
我的操作系统是Windows10,我在windows上使用bash来执行linux命令。我有一个96行的文件,我有多个文件,覆盖了这个文件的每三行,我想把它们的平均值和标准偏差添加到一个文件中,作为一行一行 单个文件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
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