이상한 인쇄 문제

이상한 인쇄 문제

로그 파일에서 값을 가져와 Excel 스프레드시트에 채우는 코드가 있습니다.

function ltrim(s) { sub(/^[ \t]+/, "", s); return s }
function rtrim(s) { sub(/[ \t]+$/, "", s); return s }
function trim(s)  { return rtrim(ltrim(s)); }

function getfield( xml, fieldname) {
    i = index ( xml, "fieldName=\""fieldname"\"");
    if(i < 1){
      ts = "";
    }
    else{
       ts = substr( xml, i + length("fieldName=\""fieldname"\"") );
       ts = substr( ts, index( ts, "value=\"" ) + length( "value=\"" ) );
       ts = substr( ts, 1, index( ts, "\"")-1);
       gsub(/&amp;/, "&", ts );
       if ( index( ts, "," ) > 0 ) ts ="\""ts"\"";
    }
            return ts;
        }
BEGIN   { FS = "--------";OFS=",";}
 {sub(/..,[A-Z][A-Z]/, "CT-PT")}

        {
                orig = $0;
               # $7 = getfield(orig, "Modalities In Study");
                $9 = getfield(orig,"Subject Patients Sex");
                $10 = getfield(orig,"Modality Body Region");
                $11 = getfield(orig, "Patients Birth Date");
                $12 = getfield(orig, "Protocol Name");
                $13 = getfield(orig, "Timepoint ID");
                print;
         }

한 가지를 제외하고는 모든 것이 잘 작동합니다. 이 인쇄 문을 코드의 아무 곳에나 배치하면 전체 Excel 스프레드시트를 반복합니다. 따라서 기본적으로 print 문은 다른 모든 줄에 나타납니다. 나는 그것이 첫 번째 줄에 나타나기를 원합니다.

{print "Study Instance UID,Number of Series,Number of Instances, Exam Transfer Date,Exam Date,Subject Number,Modalities In Study,Upload Status,Subject Patients Sex,Modality Body Region,Patients Birth Date,Protocol Name,Timepoint"}

왜 이런 일이 발생하는지 모르겠습니다. 함수 뒤에 이 줄을 넣으려고 시도했지만 trim(s) { return rtrim(ltrim(s)); }여전히 스프레드시트를 통해 반복됩니다. 누구든지 제안 사항이 있거나 이런 일이 발생하는 이유를 알고 있습니까?

답변1

기능 외에도 awk 코드는 다음과 같습니다.

condition {actions}

{actions}조건이 true를 반환할 때 암시적인 작업은 블록이 누락된 경우 입니다 {print}.

누락된 경우 condition이는 귀하의 질문과 직접적인 관련이 있으며 암시적으로 사실입니다.각 행마다입력. 그렇기 때문에 줄을 여러 번 인쇄하는 것입니다.

조건을 지정해야 합니다. Stéphane이 제안한 대로 print 문을 BEGIN 블록 안에 넣거나 다음과 같이 할 수 있습니다.

NR == 1 {print "this is the header"}

이 작업은 조건이 true인 경우, 즉 입력의 첫 번째 줄에만 발생합니다.

관련 정보