だから私のファイルには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