その下の値を求めれば良いのです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
最初の列にのみ必要です。このスクリプトは、フィールドが 1 つ以上のスペースまたはタブで区切られていると仮定し、前のスペースまたはタブを無視します。
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
複数行に表示されると、スクリプトはすべての項目の下に1行に1つずつ値を印刷します。
以前の提案
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 }
= 列がゼロでない場合は、列の値を印刷して列を消去します。{ for(i=1; !col && (i<=NF); i++) if($i == key) col=i }
= は、ループのキーに一致する最初のフィールドを検索し、列番号を保存します。
WOX
何度も現れる場合同じ行に、最初の値より下の値を印刷します。
スクリプトは質問に表示された入力とキーに対して機能しますが、キーまたは値フィールドの前にNULL値があると問題が発生します。