首页 > 解决方案 > 根据模式条件添加2行的元素

问题描述

我想根据模式添加 2 行

我有这张桌子

1        -         513        1478          966        1  
2        -        1594        2130          537        1  
3        +        2171        2539          369        1  
4        -        2587        3159          573        1

我正在寻找的是添加一个 $7 列,其中第一个元素以 0 开头,如果 $2 是“-”,则从 $7 中减去 -1,否则在 $7 中添加 +1,如下所示:

1        -         513        1478          966        1     -1  
2        -        1594        2130          537        1     -2  
3        +        2171        2539          369        1     -1  
4        -        2587        3159          573        1     -2  `

我写了这个

awk '$7==0,i=1;{for i in $1 do {if($2="-"){$7=$7+1}else{$7=$7-1} done print}'

我的代码的问题是,如果我删除for条件将整个 $2 变成 - 并且整个 $7 是 -1

标签: linuxbashawkcommand

解决方案


使用@RavinderSingh13 的技巧

$ awk '{print $0 "\t" (c+=$2"1")}' file

1        -         513        1478          966        1        -1
2        -        1594        2130          537        1        -2
3        +        2171        2539          369        1        -1
4        -        2587        3159          573        1        -2

推荐阅读