awk 명령을 사용하여 마지막 줄(또는 특정 줄 번호)만 편집하는 방법은 무엇입니까?

awk 명령을 사용하여 마지막 줄(또는 특정 줄 번호)만 편집하는 방법은 무엇입니까?

#n개의 레코드(행)가 포함된 큰 다중 열 파일이 있습니다. awk마지막 레코드나 특정 레코드 번호에만 명령을 적용하려면 어떻게 해야 합니까 ?IGNR==4) 또는 행 범위(NR==[2-5])?

다음 파일의 예를 들면 다음과 같습니다.

echo filename
30.5,2010/06/01,2016/08/29,2281.00,0006.25,0074.94
41.6,2008/03/05,2012/03/05,1461.00,0004.00,0048.00
39.6,2008/03/05,2012/09/10,1649.96,0004.52,0054.21
41.0,2008/03/05,2013/09/16,2020.96,0005.53,0066.40
42.2,2008/03/05,2014/03/18,2203.96,0006.03,0072.41
41.1,2008/03/05,2014/09/16,2385.96,0006.53,0078.39
43.1,2008/05/08,2014/09/16,/2322.00,/0006.36,/0076.29

날짜를 제외한 모든 필드를 제거하기 위해 다음 awk 스크립트를 적용했습니다 /.

nawk -F, -v OFS=,  '{split($4,a,"/"); $4=sprintf("%06.2f", a[2]);split ($5,b,"/");$5=sprintf("%06.2f", b[2]);split($6,c,"/");$6=sprintf("%06.2f", c[2]); print $0}' filename 

마지막 행에는 적합하지만 그렇지 않은 다른 행에는 부정적인 영향을 미칩니다 /. 다음 출력:

output

30.5,2010/06/01,2016/08/29,000.00,000.00,000.00
41.6,2008/03/05,2012/03/05,000.00,000.00,000.00
39.6,2008/03/05,2012/09/10,000.00,000.00,000.00
41.0,2008/03/05,2013/09/16,000.00,000.00,000.00
42.2,2008/03/05,2014/03/18,000.00,000.00,000.00
41.1,2008/03/05,2014/09/16,000.00,000.00,000.00
43.1,2008/05/08,2014/09/16,2322.00,006.36,076.29


however, the expected correct output should be :

30.5,2010/06/01,2016/08/29,2281.00,0006.25,0074.94
41.6,2008/03/05,2012/03/05,1461.00,0004.00,0048.00
39.6,2008/03/05,2012/09/10,1649.96,0004.52,0054.21
41.0,2008/03/05,2013/09/16,2020.96,0005.53,0066.40
42.2,2008/03/05,2014/03/18,2203.96,0006.03,0072.41
41.1,2008/03/05,2014/09/16,2385.96,0006.53,0078.39
43.1,2008/05/08,2014/09/16,2322.00,0006.36,0076.29

그렇다면 마지막 줄이나 특정 줄 번호에만 적용하도록 awk에 어떻게 지시합니까?

답변1

awk가 파일을 처리할 때 변수NR처리된 총 레코드 수를 나타냅니다. 그래서 당신은무늬예를 들어

(NR == 5)

당신 전에행동

{split($4,a,"/");...

예를 들어,

(NR == 5){split($4,a,"/");...

공정 라인 5.

네가 처리하고 싶다면마지막행만 해당 행을 기본 작업으로 저장할 수 있습니다.

{ save = $0; }

해당 섹션에서 해당 행을 처리합니다 END. 하지만 거기에서 필드 분할을 수행해야 합니다( $0더 이상 적용할 수 없음).

END {split(whatever,a,"/");...

범위의 경우 더 복잡한 표현식을 사용할 수 있습니다.

( NR >= 2 && NR <= 5 )

2~5행을 선택합니다.

추가 자료:

관련 정보