如何根据条件使用 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
或创建一个名为 diffStart
的 awk
变量并在其中赋值 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
我有这样一个数据文件:
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
或创建一个名为 diffStart
的 awk
变量并在其中赋值 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