awk에서 열의 한 행에서 패턴을 인쇄하는 방법

awk에서 열의 한 행에서 패턴을 인쇄하는 방법

A.txt 파일(sep=",")이 있습니다.

kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,taq,205920777.1,A01,Unkn-01
,taq,neg5,A02,Unkn-09
,,,,,,,,,,
*reporting.

다음과 같이 파일의 첫 번째 열 13번째 줄 다음에 3번째 줄의 패턴을 추가하고 싶습니다.

kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
07/02/2020 13:44:11 UTC,taq,205920777.1,A01,Unkn-01
07/02/2020 13:44:11 UTC,taq,neg5,A02,Unkn-09
,,,,,,,,,,
*reporting.

비결은 A.txt의 데이터가 B.txt의 $1에 인쇄되도록 B.txt의 구분 기호로 "="를 설정하는 것입니다. 나는 비슷한 것을 시도했습니다 :

awk 'BEGIN{OFS=FS=" = "} NR==3{stuff} } 1' A.txt > B.txt

그러나 나는 그것을 이해하지 못했습니다. 어떤 아이디어가 있나요?

감사해요

답변1

노력하다:

awk -F' = ' 'NR==3{a=$2} {if(NR<14)print; else print a $0}' A.txt

예제 입력을 사용하여:

$ awk -F' = ' 'NR==3{a=$2} {if(NR<14)print; else print a $0}' A.txt
kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
07/02/2020 13:44:11 UTC,taq,205920777.1,A01,Unkn-01
07/02/2020 13:44:11 UTC,taq,neg5,A02,Unkn-09

여러 줄 형식

여러 줄에 걸쳐 명령을 분산시키려는 경우:

awk -F' = ' '
    NR==3{
        a=$2
    }

    {
        if(NR<14)
            print
        else
            print a $0
    }
    ' A.txt

어떻게 작동하나요?

  • -F' = '

    그러면 필드 구분 기호가 로 설정됩니다 =.

  • NR==3{a=$2}

    세 번째 행의 경우 두 번째 필드가 변수에 저장됩니다 a.

  • if(NR<14)print; else print a $0

    행 번호가 14보다 작은 경우 해당 행을 그대로 인쇄합니다. 나머지 줄의 경우 a변수 앞에 오는 줄을 인쇄합니다.

업데이트: 마지막 4개 행을 제외한 모든 행에 14행의 시간을 추가합니다.

awk -F' = ' 'NR==3{t=$2} NR<14{print;next} NR>17{print t d} {d=c;c=b;b=a;a=$0} END{print d ORS c ORS b ORS a}' A.txt

입력 파일 예:

$ cat A.txt
kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,taq,205920777.1,A01,Unkn-01
,taq,neg5,A02,Unkn-09
end1
end2
end3
end4

해당 출력:

$ awk -F' = ' 'NR==3{t=$2} NR<14{print;next} NR>17{print t d} {d=c;c=b;b=a;a=$0} END{print d ORS c ORS b ORS a}' A.txt
kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
07/02/2020 13:44:11 UTC,taq,205920777.1,A01,Unkn-01
07/02/2020 13:44:11 UTC,taq,neg5,A02,Unkn-09
end1
end2
end3
end4

답변2

"라인 독립적" 버전

awk -F, -v OFS="," '$0~/UTC/{split($0,ar,"= ")}$2=="taq"{$1=ar[2]}1' file

kit
Software Version =
Date And Time of Export = 07/02/2020 13:44:11 UTC
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
07/02/2020 13:44:11 UTC,taq,205920777.1,A01,Unkn-01
07/02/2020 13:44:11 UTC,taq,neg5,A02,Unkn-09
,,,,,,,,,,
*reporting.

FS합계를 설정 OFS하되 ,날짜를 ar찾은 행의 배열 로 분할하고 원하는 위치에 UTC삽입하세요.$1$2=="taq"

관련 정보