awk로 텍스트 파일에서 처음 6 줄 / 행을 건너 뜁니다.


39

텍스트 파일 (input.txt)에서 처음 6 줄 / 행을 건너 뛰고 나머지를 awk로 처리하려면 어떻게해야합니까? 내 awk 스크립트 (program.awk)의 형식은 다음과 같습니다.

BEGIN {
} 

{ 
process here
} 

END {

}

내 텍스트 파일은 다음과 같습니다

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

다음에서 시작하여 파일을 처리하고 싶습니다.

0.3 3.3
1.5 2.1
.
.
.

답변:


59

다음 두 패턴 중 하나를 사용하십시오.

NR>6 { this_code_is_active }

아니면 이거:

NR<=6 { next }
{ this_code_is_active }

awk에 대한 인수로 많은 파일이 있고 모든 파일에서 6 행을 건너 뛰려면 NR 대신 FNR을 사용하십시오.


29

시험:

awk 'FNR > 6 { #process here }' file

4
좋은! 그러나 이것이 왜 더 나은지 설명하지 않았습니다. 여러 파일의 FNR경우 각 파일의 행 번호이고 NR전체 입력의 숫자입니다 (배관시 문제는 아님).
Tomasz Gandor

3

head또는 tail프로그램을 사용하여 파일의 시작 또는 끝에 임의의 수의 행을 건너 뛸 수도 있습니다 .

구체적인 질문에 대해서는

tail input.txt -n+7 | program.awk

할 것입니다, 당신 제공 한 program.awk파일이 실행 파일입니다. 그렇지 않으면, 당신은 사용할 수 있습니다

tail input.txt -n+7 | awk -f program.awk

이런 식으로, 당신은 각 라인을 비교할 필요가 없으며 AWK 코드의 논리를 변경할 필요가 없습니다.

tail 일곱 번째 줄부터 시작하여 여섯 번째 줄을 건너 뛰고 텍스트 스트리밍을 시작합니다.

캐싱 덕분에 텍스트 프로세스가 간단한 경우에는 성능이 크게 향상되지 않습니다. 그러나 파일이 길고 클라우드 환경에서 반복적으로 사용하면 비용이 절약 될 수 있습니다.


정확하지만 일반적으로 하나의 도구로 쉽게 배관을 할 수있을 때 배관을 피해야합니다. 몇 줄을 제거하기 위해 두 명령을 통해 거대한 텍스트 파일을 연결하는 것을 생각하십시오.
Philippos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.