我遇到的问题已在之前的post中得到解决:
但是因为我有太多文件,所以在每个文件上执行awk然后使用第二个脚本来获取我想要的输出是不切实际的。
以下是我的文件的一些示例:
3
10
23
.
.
.
720
810
980
该脚本用于查看第一个文件中的数字在另一个文件中的位置:
2 0.004
4 0.003
6 0.034
.
.
.
996 0.01
998 0.02
1000 0.23
找到该范围后,估算第二个文件中第二列的平均值。
以下是脚本:
awk -v start=$(head -n 1 file1) -v end=$(tail -n 1 file1) -f script file2
和
BEGIN {
sum = 0;
count = 0;
range_start = -1;
range_end = -1;
}
{
irow = int($1)
ival = $2 + 0.0
if (irow >= start && end >= irow) {
if (range_start == -1) {
range_start = NR;
}
sum = sum + ival;
count++;
}
else if (irow > end) {
if (range_end == -1) {
range_end = NR - 1;
}
}
}
END {
print "start =", range_start, "end =", range_end, "mean =", sum / count
}
我怎么能做一个循环,以便估计每个文件的平均值。我想要的输出是这样的:
Name_of_file
start = number , end = number , mean = number
提前致谢。
答案 0 :(得分:2)
..将它包裹在循环中?
for f in <files>; do
echo "$f";
awk -v start=$(head -n 1 "$f") -v end=$(tail -n 1 "$f") -f script file2;
done
我个人建议将它们组合在一行上(这样你的结果就是块数据而不是结果中不同行的文件名 - 在这种情况下用echo "$f"
替换echo -n "$f "
(不添加换行符。)
编辑:因为我认为你是语法新手,<files>
可以是文件列表(file1 file2 file 3
),是由glob生成的文件列表({{1} },file*
,等等,或命令生成的文件列表(files/data_*.txt
等)。