AWK에서 특정 행과 열의 값을 가져와야 합니다.

AWK에서 특정 행과 열의 값을 가져와야 합니다.

그 아래의 값을 구하면 되는데 WOX, 이 경우에는 4와 같습니다.

IOT  CND  FO    WZX  END
0         0     0    0
WOX  SR  POW   LIO LIO2
4    00  0
FDR   OTY  M
0

아래 코드를 시도했지만 더 이상 진행할 수 없습니다.

WOXpos=index(DATA,"WOX") 
BR=trim(substr(DATA,WOXpos,3))

내가 얻는 결과는 다음과 같습니다

IOT
0
WOX
4
FDR
0

답변1

편집하다:

주석에서 언급했듯이 키는 WOX첫 번째 열에만 있어야 합니다. 이 스크립트는 필드가 하나 이상의 공백이나 탭으로 구분되어 있다고 가정하고 선행 공백이나 탭을 무시합니다.

awk -v key=WOX 'found { print $1; found=0 }
    $1 == key { found=1 }' inputfile

인쇄

4

설명하다:

에서 awk필드 번호/열은 1부터 시작합니다. ( $0전체 라인을 나타냅니다.)

  • -v key=WOX= 변수 설정
  • found { print $1; found=0 }= 키가 이전 행에서 발견되면 첫 번째 열의 값을 인쇄하고 플래그를 지웁니다.
  • $1 == key { found=1 }= 첫 번째 필드를 비교하고 일치하는 항목이 있으면 플래그를 설정합니다.

키가 WOX여러 줄에 나타나면 스크립트는 모든 항목 아래에 한 줄에 하나씩 값을 인쇄합니다.


이전 제안

awk -v key=WOX 'col { print $col; col=0 }
    { for(i=1; !col && (i<=NF); i++) if($i == key) col=i }' inputfile

설명하다:

에서 awk필드 번호/열은 1부터 시작합니다. ( $0전체 라인을 나타냅니다.)

  • -v key=WOX= 변수 설정
  • col { print $col; col=0 }= 열이 0이 아닌 경우 열의 값을 인쇄하고 열을 지웁니다.
  • { for(i=1; !col && (i<=NF); i++) if($i == key) col=i }=는 루프의 키와 일치하는 첫 번째 필드를 검색하고 열 번호를 저장합니다.

WOX여러 번 나타나는 경우같은 줄에, 첫 번째 값 아래의 값을 인쇄합니다.

스크립트는 질문에 표시된 입력 및 키에 대해 작동하지만 키 또는 값 필드 앞에 null 값이 있으면 문제가 발생합니다.

관련 정보