awk 명령, 분할, 반복 및 ORS에 대해 알아보세요.

awk 명령, 분할, 반복 및 ORS에 대해 알아보세요.

분해하고 해독하려는 코드 조각이 있습니다. 각 단계에서 무슨 일이 일어나는지 안내해 줄 사람이 필요합니다.

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=""
}

관련 정보