awk를 사용하여 세 번째 줄마다 건너뛰는 방법

awk를 사용하여 세 번째 줄마다 건너뛰는 방법

파일 정리를 도와줄 수 있는 사람이 있나요? awk를 사용하여 아래 예제를 기반으로 세 줄마다 건너뛰고 싶습니다.

현재 파일:

a
a
a
a
b
b
b
b
c
c
c
c

원하는 출력:

a
b
c

답변1

$ awk 'NR%4==0 { print $0, "in line#", NR }' infile
a in line# 4
b in line# 8
c in line# 12

그래서:

awk 'NR%4==0' infile

첫 번째 줄을 인쇄하려면 로 변경한 awk 'NR%4==1'후 다음 세 줄을 건너뜁니다.

답변2

GNU 사용 sed:

$ sed -n '1~4p' filename
a
b
c

답변3

사용 awk:

awk '{ print; getline; getline; getline}' file

getline파일의 다음 줄로 이동합니다.이봐. 아무것도 하지 않으면 awk다음 줄로 넘어갑니다.

이 예에서는 세 번 사용되었지만 getline아무 작업도 수행하지 않으므로 awk세 줄을 건너뛰었습니다.

다른 용도 getline:

흥미롭게 getline < "other_file"도 이 명령은 다른 파일에서 한 줄을 읽는 데 사용됩니다.

getline그러나 이러한 문제에는 일반적으로 of를 사용하는 것이 권장되지 않으며 결과를 테스트하지 않고 이러한 방식으로 내장 변수를 채우는 것은 권장되지 않습니다.http://awk.freeshell.org/AllAboutGetline언제, 어떻게 사용하는지 알아보세요 getline.

또는 awk배열과 함께 사용하십시오.

awk '{arr[NR]=$0; }END{ for(i=1;i<=NR;i=i+3) print arr[i]}' file

여기서 NR의 arr 인덱스(레코드 번호, 즉 행)가 main블록에 생성됩니다. END블록 내에서는 for 루프가 작동합니다.

답변4

사용 표준 sed:

sed -n 'N;N;N;P' file

에서 읽은 각 줄에 대해 file다른 세 줄을 읽고 구분된 개행 문자를 사용하여 원래 줄에 추가합니다 N. 그런 다음 명령 은 P첫 번째 개행 문자까지 원래 행을 인쇄합니다.

또는:

sed -n 'p;n;n;n' file

이는 비슷하지만 먼저 현재 줄이 인쇄되고 그 다음 폐기되는 다른 세 줄을 읽습니다.

관련 정보