所以我的文件有 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