一部の行にヌル/欠落値がある場合は、awkを使用したデータの抽出

一部の行にヌル/欠落値がある場合は、awkを使用したデータの抽出

以下の例があります。

入力.txt

   USERS        position   ref   rslt   
    usr1                    X     B   
    usr2          2980            C   
    usr3          3323      P      
    usr4                          A  
    usr5          5251      U      
    usr6          9990            A
    usr7          10345     T     

「rslt」列と対応する「USERS」を印刷する必要があります。出力ファイルは次のようにする必要があります。

出力.txt

  USERS     rslt   
   usr1       B   
   usr2       C       
   usr4       A
   usr6       A 

awk成功せずにコマンドを試してみました。表の黒い位置はすべて空白で埋められています。 (各行の空白数は異なります。)

ベストアンサー1

この場合、考えられる解決策は、最初にフィールド幅を提供することです。

awk 'BEGIN {FIELDWIDTHS = "16 11 6 7"} 
    $4 ~/[^ ]/ {print $1 $4}' 

フィールドの幅は手動で計算できますが、複雑なヘッダーの場合は最初に計算するのが好きです。

 head -1 f | grep -Po '.*? (?=\S|$)' | awk '{print length}'

更新:...またはヘッダーの最初と最後のスペースを処理するには:

 head -1 f | grep -Po '(^ *|\S).*?( (?=\S)|$)' | awk '{print length}'

おすすめ記事