n개 행의 각 그룹에 대해 행 범위를 삭제하는 방법은 무엇입니까? [복사]

n개 행의 각 그룹에 대해 행 범위를 삭제하는 방법은 무엇입니까? [복사]

다음과 같은 파일로 시작하고 싶습니다.

1
2
3
4
5
1
2
3
4
5
1
2
3
4
5

다음과 같이 각 5개 세트 중 마지막 3개만 반환됩니다.

3
4
5
3
4
5
3
4
5

다음과 같은 코드를 사용하여 처음 2개를 성공적으로 얻었습니다.

awk -vn=2 -vm=5 'NR<=i{next}; (NR-i)%m==1{c=1}; c++<=n

하지만 마지막 그룹화에서 동일한 작업을 수행하는 데 문제가 있습니다.

답변1

이러한 작업은 모듈식 산술을 사용하면 더 쉽습니다.

awk '(NR-2)%5 && (NR-1)%5' file
3
4
5
3
4
5
3
4
5

또는 GNU sed의 n~m("n은 m을 건너뜁니다") 표기법을 사용합니다.

sed '1~5d;2~5d' file

관련 정보