如何根据条件使用 Linux 命令向数据插入行?

How can I insert lines to data using Linux commands based on conditions?

我有这样一个数据文件:

5000 1
6000 1
7000 2
9000 5
10000 5
11000 6
12000 8
14000 9
15000 10
...

第一列每1000个数字打印一次数据,但有些缺失。在上面的例子中,从1000到4000,8000,13000的数据丢失了。

我希望将新的数据行插入到此数据的缺失行中,该数据在第二列中包含 0。所以,结果应该是这样的:

1000 0
2000 0
3000 0
4000 0
5000 1
6000 1
7000 2
8000 0
9000 5
10000 5
11000 6
12000 8
13000 0
14000 9
15000 10
...

一直到文件末尾。

我可以使用像 awk and/or cat 这样的 Linux 命令来做到这一点吗?或者我是否需要使用 if 循环编写 shell 脚本?

您能否尝试使用 GNU awk.

中显示的示例进行跟踪、编写和测试
awk '
{
  max=(max>?max:)
  arr[]=
}
END{
  for(i=1000;i<=max;i+=1000){
    print i, arr[i]+0
  }
}
' Input_file

或创建一个名为 diffStartawk 变量并在其中赋值 1000 并在您想要更改它时更改其值。

awk -v diffStart="1000" '
{
  max=(max>?max:)
  arr[]=
}
END{
  for(i=diffStart;i<=max;i+=diffStart){
    print i, arr[i]+0
  }
}
'  Input_file

输出如下。

1000 0
2000 0
3000 0
4000 0
5000 1
6000 1
7000 2
8000 0
9000 5
10000 5
11000 6
12000 8
13000 0
14000 9
15000 10
$ awk -v step='1000' '
    {
        for (i=prev+step; i<; i+=step) {
            print prev+=step, 0
        }
        print
        prev=
    }
' file
1000 0
2000 0
3000 0
4000 0
5000 1
6000 1
7000 2
8000 0
9000 5
10000 5
11000 6
12000 8
13000 0
14000 9
15000 10
$ awk '{while((p+=1000)<) print p,0}1' file

1000 0
2000 0
3000 0
4000 0
5000 1
6000 1
7000 2
8000 0
9000 5
10000 5
11000 6
12000 8
13000 0
14000 9
15000 10