假设我有一堆具有以下模式的文件:
文件1:
head1
random words
number=100
random words
...
head2
random words
number=200
random words
...
head1
random words
number=200
random words
...
文件2:
head1
random words
number=1000
random words
...
head2
random words
number=200
random words
...
head1
random words
number=2000
random words
...
我想看看哪个文件在head1
下平均有更大的数字,在这种情况下,文件1有(100 + 200) / 2 = 150
而文件2有(1000 + 2000)/2 = 1500
。
所以我想以任何格式打印出这个结果,但有一个可能是:
File 1: 150
File 2: 1500
我对linux命令很新,有谁可以帮我解决这个问题?
答案 0 :(得分:-1)
#!/bin/csh
foreach x (file1 file2 file3)
echo -n $x" :"
sed -n '/head1/,/\.\.\./p' $x |\
awk -F "=" ' BEGIN{sum=0;cnt=0}\
/number/{sum=sum+$2;cnt++}\
END{if(cnt)print sum/cnt;else print " " sum}'
end
file1 : 150
file2 : 2000
file3 : 0
1)使用foreach x (file1 file2 file3)
2)打印文件名,而不是行echo -n $x" :"
3)仅包含原始文件的相关部分
sed -n '/head1/,/\.\.\./p' $x |\
(sed -n
无声,/first str/,/second str/p
介于2个字符串之间,$x
文件的名称来自循环)
4)将字段分隔符设置为“=”awk -F "="
,设置总和和计数以计算平均值BEGIN{sum=0;cnt=0}
,如果行包含数字inc cnt和“=”car {{1}之后的总和值}
5)检查是否有任何数字相加,如果有打印平均值,则打印0 /number/{sum=sum+$2;cnt++}
file1:100 + 200 = 300 300/2 = 150
END{if(cnt)print " "sum/cnt;else print " " sum}'
file2:1000 + 2000 + 3000 = 6000 6000/3 = 2000
head1
random words
number=100
random words
...
head2
random words
number=200
random words
...
head1
random words
number=200
random words
...
file3:没有head1 - > 0 强>
head1
random words
number=1000
random words
...
head1
random words
number=2000
random words
...
head1
random words
number=3000
random words
...