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

관련 정보