그 아래의 값을 구하면 되는데 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 값이 있으면 문제가 발생합니다.