小编Him*_*aul的帖子

使用if-else检查数字序列的连续性

我有一个包含数字的文件,例如1到300.但数字不是连续的.示例文件如下所示

042
043
044
045
078
198
199
200
201
202
203
212
213
214
215
238
239
240
241
242
256
257
258
Run Code Online (Sandbox Code Playgroud)

现在我需要检查数字序列的连续性,并相应地写出输出.例如,前4个数字是串联的,因此输出应该是

042-045
Run Code Online (Sandbox Code Playgroud)

接下来,078是一个单独的数字,所以输出应该是

078
Run Code Online (Sandbox Code Playgroud)

为方便起见,它可以看起来像

078-078
Run Code Online (Sandbox Code Playgroud)

然后198到203是连续的.所以,下一个输出应该是

198-203
Run Code Online (Sandbox Code Playgroud)

等等.最终的输出应该是这样的

042-045
078-078
198-203
212-215
238-242
256-258
Run Code Online (Sandbox Code Playgroud)

我只需要知道连续系列的第一个和最后一个成员,并在遇到不连续时跳到下一个系列; 输出可以被操纵.我倾向于使用if语句,可以想到像这样复杂的事情

    num=`cat file | wc -l`
    out1=`head -1 file`
    for ((i=2;i<=$num;i++))
    do
     j=`echo $i-1 | bc`
     var1=`cat file | awk 'NR='$j'{print}'`
     var2=`cat file | awk 'NR='$i'{print}'`
     var3=`echo $var2 - $var1 | bc`
     if [ $var3 -gt 1 ]
     then 
      out2=$var1 …
Run Code Online (Sandbox Code Playgroud)

shell awk fortran if-statement

2
推荐指数
1
解决办法
84
查看次数

使用awk连续元素的移动平均值

我正在尝试编写一个脚本,其中每个行元素将给出接下来N行(包括其自身)的平均值.我知道如何使用前面的行,如第N行将给出前面N行的平均值.这是脚本

awk '
BEGIN{
       N = 5;
     }

     { 
       x = $2;
       i = NR % N;
       aveg += (x - X[i]) / N;
       X[i] = x;
       print $1, $2, aveg; 
     }' < file > aveg.txt
Run Code Online (Sandbox Code Playgroud)

文件看起来像这样

     1       1
     2       2
     3       3
     4       4
     5       5
     6       6
     7       7
     8       8
     9       9
    10      10
    11      11
    12      12
    13      13
    14      14
    15      15
    16      16
    17      17
    18      18
    19      19
    20      20
    21      21
    22 …
Run Code Online (Sandbox Code Playgroud)

bash awk

1
推荐指数
1
解决办法
557
查看次数

标签 统计

awk ×2

bash ×1

fortran ×1

if-statement ×1

shell ×1