减去以特定数字结尾的值?

KLM*_*117 0 awk sed

我有一个 .bed (.tsv) 文件,如下所示:

chr1    0   100000
chr1    100000  200000
chr1    200000  300000
chr1    300000  425234
Run Code Online (Sandbox Code Playgroud)

我想使用 sed 或 awk 仅对第 3 列中以“000”结尾的值执行操作 -1,以便输出如下所示:

chr1    0   99999
chr1    100000  199999
chr1    200000  299999
chr1    300000  425234
Run Code Online (Sandbox Code Playgroud)

令人尴尬的是,我想出的最好的办法是:


awk {sub(/000$/,"999",$3); print $1,$2,$3}' oldfile > newfile

Run Code Online (Sandbox Code Playgroud)

它只是用最后 3 位数字代替 999,而不是实际相减。任何帮助总是值得赞赏!

tri*_*eee 5

awk 也可以轻松地执行算术运算。

awk 'BEGIN{FS=OFS="\t"} $3 ~ /000$/ {$3 -= 1}1' oldfile > newfile
Run Code Online (Sandbox Code Playgroud)

这是假设文件中的所有行始终具有三个字段并且您想要打印所有行。

sed即使是最简单的算术也不知道,所以它不是特别适合这个。