使用awk插入新数据并添加距离

使用awk插入新数据并添加距离,awk,Awk,我有一个这样的数据集(file.txt)选项卡 1 a 3 b 5 c 7 d 8 e 12 f 17 g 20 h 当我想添加新数据时 6 我想创建一个新列,其中包括新条目的剩余部分。 期望的输出如下所示: 1 a 5 3 b 3 5 c 1 6 0 7 d 1 8 e 2 12 f 6 17 g 11 20 h 14 我试过: awk -v new="6" '

我有一个这样的数据集(file.txt)选项卡

1   a   
3   b
5   c
7   d
8   e
12  f
17  g
20  h
当我想添加新数据时

6
我想创建一个新列,其中包括新条目的剩余部分。 期望的输出如下所示:

1   a   5   
3   b   3
5   c   1
6       0
7   d   1
8   e   2
12  f   6
17  g   11
20  h   14
我试过:

awk -v new="6" '
BEGIN {
    FS=OFS="\t"
{gsub(new,",\n")}
{print $0"\n"$2,$3=|new-$1|}
' file

如果已经存在相同的号码怎么办?在现有编号之后或之前添加新编号?顺便说一句,不是我的反对票。谢谢你的关注@JamesBrown如果已经有相同的号码,我想在exist之后添加。它必须是纯
awk
?对Bash的突破要简单得多:添加新行,排序,然后使用awk添加第三列。感谢您的关注@RuudHelderman。我选择awk作为我的awk代码管道的实现。如果已经存在相同的编号怎么办?在现有编号之后或之前添加新编号?顺便说一句,不是我的反对票。谢谢你的关注@JamesBrown如果已经有相同的号码,我想在exist之后添加。它必须是纯
awk
?对Bash的突破要简单得多:添加新行,排序,然后使用awk添加第三列。感谢您的关注@RuudHelderman。我选择awk来实现我的awk代码管道。
$ awk -v new=6 '
BEGIN {
    FS=OFS="\t"
}
{
    if((new<$1)&&f=="") {            # when greater than new values seen  
        print new                    # for the first time, act
        f=1                          # flag to print only once
    }
    print $1,$2,((v=new-$1)<0?-v:v)  # abs with ternary operator
}' file
1       a       5
3       b       3
5       c       1
6
7       d       1
8       e       2
12      f       6
17      g       11
20      h       14