파일 정리를 도와줄 수 있는 사람이 있나요? 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
이는 비슷하지만 먼저 현재 줄이 인쇄되고 그 다음 폐기되는 다른 세 줄을 읽습니다.