2013-06-05 2 views
2

awk를 사용하여 편집하고 싶은 수백 개의 텍스트 파일이 있습니다. 예 :awk는 for 알고리즘과 while 루프를 결합합니다.

5483.39 5134.64 4602.88 3953.89 3271.87 2495.87 1788.98 1285.57 1034.09 1196.25 1851.03 2874.14 3797.68 4361.26 4717.09 4829.74 4760.26 4758.12 4790.80 4763.77 4734.56 3311.89 -811.57 -6152.48 

다음 알고리즘을 사용하여 편집하고 싶습니다. 마지막 값 (이 경우 -6152.48)부터 시작하여 카운트 수가 필드 1의 85 % 미만인지 확인하고 싶습니다.이 필드 값을 true로 설정하면 $ 1로 재설정됩니다. 그런 다음 $ (NF-1) 등으로 반복합니다. 그러나이 85 % 조건이 충족되지 않은 필드 값 (예 : $ i> 0.85 * $ 1)이 발생하면 처음으로 루프를 벗어나서 모두 나가기를 원합니다. 다른 분야는 그대로.

이 작업을 수행하려면 각 필드 값을 검사하고 while 루프에서 조건을 검사하는 데 foreach 루프가 필요하다고 생각합니다. 여기 내가 지금까지 가지고있는 것입니다

awk 'BEGIN{flag=0} {for(i=1;i<=NF;i++) a[i] = $i/$1} {for(i=NF;i>=1;i--) print a[i],flag}' file 

awk를 사용하여 필요한 로직을 구현하는 방법을 잘 모르겠습니다. if ($ i> 0.85 * $ 1) flag = 1; 위의 for 루프를 이스케이프 처리하십시오.

아마도 for 및 while 루프가 필요하지 않습니다.

아이디어가 있으십니까?

답변

2

된 awk 의사 코드 :

for(i=NF; i>=1; i--) 
{ 
    if($i>0.85*$1) 
     break; 
    else 
     print $i; 
} 

break 문은 명시 적으로 루프에서 탈출의 목적을 제공합니다.

+0

우수 – moadeep

관련 문제