使用awk插入新数据并添加距离
我有一个这样的数据集(file.txt)选项卡使用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" '
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