awk를 사용하여 필드를 일치시킨 후 다음 필드를 가져 오려고합니다.Awk - 일치하는 레코드 다음에 오는 레코드를 인쇄하십시오.
할 수있는 옵션이 있습니까? 아니면 배열로 레코드를 스캔 한 다음 배열의 각 필드를 확인한 후 그 필드를 인쇄해야합니까?
내가 지금까지 가지고 :
파일 형식은 다음과 같습니다
<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE>
... 등등, field|value
쌍이 반복 될 것입니다 적어도 한 줄에 한 쌍 또는 여러 쌍 < 라인 당 10
dat.txt :
FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3
FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3
FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3
함께
라인 일치 FIELDB2에 두 번째 필드를 출력 간단한 awk 스크립트 :
#!/bin/awk -f
BEGIN { FS = "1" }
/FIELDB2/ { print $2 }
실행 위 :이 일치하는 라인 때문이다
VALUEB0
:
> ./scrpt.awk dat.txt
저를 제공합니다 :
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
기록에 분할 같습니다
어떤에서 두 번째 필드가 지금은 일치하는FIELDXX
모르지만 일치
FIELDXX
후 줄에 다음 레코드를 인쇄하고 싶은
VALUEB0
입니다
FIELDB0 VALUEB0 FIELDB2 VALUEB2 FIELDB3 VALUEB3
, 이 특정 예제에서 FIELDB2
이 일치하면 VALUEB2
을 인쇄해야합니다.
제안 사항?
를 사용하여 물건을 둔화에 대한 필요가 없습니다 그 매력처럼 작동합니다! 그래도 설명해 주시겠습니까? 나는이 상황에서 "f && NR-1 == f"라고하는 순서를 이해하지 못한다. (NR-1) == f) && f? 필자는 FIELDB2와 일치시키기 위해 NR-1을 사용하고있는 것으로 의심해 NR이 다음 필드가되도록합니다. 그러나 어떻게 완료되고 NR 패턴과 f의 값이 일치하는지 이해할 수 없습니다. 미리 감사드립니다. – laertis