我有一个 .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,而不是实际相减。任何帮助总是值得赞赏!
awk 也可以轻松地执行算术运算。
awk 'BEGIN{FS=OFS="\t"} $3 ~ /000$/ {$3 -= 1}1' oldfile > newfile
Run Code Online (Sandbox Code Playgroud)
这是假设文件中的所有行始终具有三个字段并且您想要打印所有行。
sed即使是最简单的算术也不知道,所以它不是特别适合这个。