bash 脚本 - 删除行并减少列值

bash 脚本 - 删除行并减少列值

所以我的文件有 3 列:

9 1 2
2 2 1
5 3 1
7 3 1
5 3 1
2 3 1
8   2 1
3 2 1
1 1 1

我想从第一列中删除特定值和相关行,例如 2 和 5(在同一列中出现多次),并减少第一列中大于该值的所有值。因此,如果我先删除我想要获得的数字 2:

8 1 2

4 3 1
6 3 1
4 3 1

7 2 1
2 2 1
1 1 1

然后是 5(现在是 4)我的输出将是:

7 1 2


5 3 1


6 2 1
2 2 1
1 1 1

我怎样才能做到这一点?考虑到我必须删除实际情况中的很多值,并且文件非常大。

答案1

bash+awk解决方案:

i=0;
for n in 2 5; do
    awk -v n="$n" -v iter=$((++i)) \
   'iter == 1{ 
        if ($1 > n) { $1-- } else if ($1 == n) { next }
    }
    iter > 1{
        if ($1 + 1 == n){ next } else if ($1 >= n) $1-- 
    }1' inp_file > tmp_inpfile && mv tmp_inpfile inp_file
done

最终inp_file内容:

7 1 2
5 3 1
6 2 1
2 2 1
1 1 1

相关内容