Bash 在awk中添加循环
我有一个问题在以前的一次会议上得到了解决: 但是因为我有太多的文件,所以对每个文件进行awk,然后使用第二个脚本来获得我想要的输出是不现实的 以下是我的文件的一些示例:Bash 在awk中添加循环,bash,shell,for-loop,awk,Bash,Shell,For Loop,Awk,我有一个问题在以前的一次会议上得到了解决: 但是因为我有太多的文件,所以对每个文件进行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
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
及
我怎样做一个循环来估计每个文件的平均值呢。我想要的输出是这样的:
Name_of_file
start = number , end = number , mean = number
提前谢谢。。。把它绕成一个圈
for f in <files>; do
echo "$f";
awk -v start=$(head -n 1 "$f") -v end=$(tail -n 1 "$f") -f script file2;
done
用于f-in;做
回声“$f”;
awk-v start=$(head-n1“$f”)-v end=$(tail-n1“$f”)-f脚本文件2;
完成
就个人而言,我建议将它们组合在一行上(这样您的结果就是块数据,而不是与结果不同行上的文件名——在这种情况下,将echo“$f”
替换为echo-n“$f”
(不要添加换行符)
编辑:因为我假设您对语法不熟悉,
可以是文件列表(file1 file2 file3
),由glob生成的文件列表(file*
,files/data.*.txt
,等等),也可以是由命令生成的文件列表($(find files/-name'data'-type f)
,等等).GNU awk版本4具有BEGINFILE
和ENDFILE
特殊模式,这可能很有用。您应该做的是将问题减少到索引文件和两个其他文件,并显示所需的输出:
for f in <files>; do
echo "$f";
awk -v start=$(head -n 1 "$f") -v end=$(tail -n 1 "$f") -f script file2;
done