コマンド出力から2番目の列を取得する方法は?

コマンド出力から2番目の列を取得する方法は?

私のコマンドの出力は次のとおりです。

                                   N O D E   O U T P U T

THE FOLLOWING TABLE IS PRINTED FOR NODES BELONGING TO NODE SET NSET_OUTPUT

   NODE FOOT-   NT11     
        NOTE

      3       20.00     
     11       20.00     
   1003       23.75     
   1011       23.75     
   2003       27.52     
   2011       27.52     
   3003       31.30     
   3011       31.30     
   4003       35.08     
   4011       35.08     
   5003       38.87     
   5011       38.87     
   6003       42.67     
   6011       42.67     
   7003       46.48     
   7011       46.48     
   8003       50.29     
   8011       50.29     
   9003       54.12     
   9011       54.12     
  10003       57.95     
  10011       57.95     
  11003       61.79     
  11011       61.79     
  12003       65.64     
  12011       65.64     
  13003       69.50     
  13011       69.50     
  14003       73.37     
  14011       73.37     
  15003       77.25     
  15011       77.25     
  16003       81.14

最初の列は常に数値です。私の意図は、2番目の列だけを取得することです。たとえば、次のようになります。

20.00
20.00
23.75
23.75
27.52
27.52
31.30
31.30
.
.

使う予定です

# gawk -f nset_output.awk electric_thermal.dat
BEGIN{
}
{
               if($12~/NSET_OUTPUT/ ){
                   for(i=1;i <= 5; i++){
                       getline
                   }
                   x=$2

        print x >"nset_output.dat"

    }       

}

ただし、これを行うには出力がめちゃくちゃになります。 (1つの値のみ20.00)20.00

それでは、2番目の列の値を取得する方法は? (私の場合は、405個の値の1列に対応する405個の行があります)

ベストアンサー1

最初の列の数字を確認するだけで十分だとします。

awk '$1 ~ /[0-9]/ { print $2 }' data.in >data.out

これがこの行以降の行にのみ適用されるようにするには、NSET_OUTPUT次のようにします。

sed '1,/NSET_OUTPUT/d' data.in | awk '$1 ~ /[0-9]/ { print $2 }' >data.out

これにより、前の行が削除さNSET_OUTPUTれ、残りの行がawkスクリプトに送信されます。


スクリプトは数字のみを出力します。各入力ラインについてを探しNSET_OUTPUT、見つかったら、2番目の列から数字を取得する前に5行をスキップします。

以下は修正版です。あなたのスクリプト:

BEGIN { print_values = 0 }

$12 ~ /NSET_OUTPUT/ {
    for (i = 1; i <= 5; i++) {
        getline;
    }

    print_values = 1;
}

print_values == 1 {
    x = $2;
    print x >"nset_output.dat"
}

おすすめ記事