분해하고 해독하려는 코드 조각이 있습니다. 각 단계에서 무슨 일이 일어나는지 안내해 줄 사람이 필요합니다.
FNR==NR {
if (split($1,a, "_") ==3)
f1[$1]
next
}
NF{
if (split($1, a, "_") ==3 && $1 in f1)
p=1
rec=(!rec)?$0:rec ORS $0
next
}
p{
print rec ORS
p=0; rec=""
}
답변1
NR
처리된 총 레코드 수(현재 처리 중인 레코드 포함)는 FNR
처리된 레코드 수입니다 .현재 파일에. 이는 첫 번째 파일에서만 발생합니다.
FNR==NR {
if (split($1,a, "_") ==3)
f1[$1]
next
}
이번에도 NF
현재 레코드의 필드 수입니다. 빈 줄인 경우 값은 0이며 이는 "false"("true"와 반대)이므로 블록은 비어 있지 않은 줄에 대해서만 실행됩니다. 이 블록의 값을 설정하는 코드 를 기록해 두십시오 p
. 이는 나중에 중요합니다. ORS
출력 레코드 구분 기호입니다. 이는 기록될 때 각 레코드가 어떻게 다른지입니다. 기본값은 개행입니다. 이는 rec
변수의 값 으로 조건부로 사용됩니다 .
NF{
if (split($1, a, "_") ==3 && $1 in f1)
p=1
rec=(!rec)?$0:rec ORS $0
next
}
p
마지막 블록은 값이 "true"인 경우에만 실행됩니다.
p{
print rec ORS
p=0; rec=""
}