그래서 내 파일에는 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