質問の出力から最初の列の正数をどのように抽出できますか?

質問の出力から最初の列の正数をどのように抽出できますか?

私はUbuntu 14.04.1 LTS 64ビットを実行しており、次の出力生成というプログラムがBash 4.3.11(1)-releaseあります。harminv

$ h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 
# harminv: 1902 inputs, dt = 0.1
frequency, decay constant, Q, amplitude, phase, error
# searching frequency range 0.31831 - 0.477465
# using 200 spectral basis functions, density 6.60692
-2.14026, 3.511909e-05, 30471.5, 0.922444, 1.26783, 1.383955e-06
2.14013, 2.052504e-05, 52134.7, 0.920264, -1.27977, 3.426846e-07
# harminv: 2/6 modes are ok: errs <= 1.000000e-01 and inf * 3.426846e-07
, amps >= 0, 9.000000e-01 * 0.922444, |Q| >= 10

-v(verbose)オプションを省略すると、次のようにより簡潔な出力が得られます。

$ h5totxt hsli0.126.h5 | harminv -t 0.1 -w 2-3 -a 0.9 -f 200 
frequency, decay constant, Q, amplitude, phase, error
-2.14026, 3.511909e-05, 30471.5, 0.922444, 1.26783, 1.383955e-06
2.14013, 2.052504e-05, 52134.7, 0.920264, -1.27977, 3.426846e-07

どちらの場合も、出力の最初の列から正の数を抽出できるようにしたいのですが、これを行う方法がわかりません。またはを使用できsedますawk。誰かが私に正しい方向を教えてくれれば幸いです。私の目標は、すべての正数を記録して他の変数についてプロットすることです。

ベストアンサー1

sedを使う

これにより、正数で始まる行だけが印刷されます。

sed -n 's/^\([[:digit:]][^ ,]*\).*/\1/p'

パイプラインの1つと組み合わせると、次のようになります。

h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | sed -n 's/^\([[:digit:]][^ ,]*\).*/\1/p'

どのように動作しますか?

  • -n

    これはsed、明示的に要求しない限り、どの行も印刷しないように指示します。

  • s/^\([[:digit:]][^ ,]*\).*/\1/p

    これはsed、正の数で始まる行を見つけて、その数だけを印刷することを意味します。

    正規表現では、^行の先頭のみが一致します。 [[:digit:]]すべての数字と一致します。 [^ ,]*数字の後のすべての項目と一致します(スペースやカンマを除く)。後でその番号を呼び出すために括弧でグループ化されています\1。その後、行全体が数字に変わり、オプションで印刷するように指示pします。sed

    数字と一致するものです[0-9]。 Unicodeフォントの出現により、これは信頼できなくなります。[[:digit:]]しかし、式はUnicodeから安全です。

拡張正規表現の使用の代替

すべてのLinuxシステムの場合と同様に、GNU sedを使用している場合は、この-rオプションを使用して次のようにすることができます。拡張正規表現。拡張正規表現では、グループ化に使用される角かっこをエスケープする必要はありません。

sed -rn 's/^([[:digit:]][^ ,]*).*/\1/p'

OSXや他のBSDシステムでは、-E代わりに-r

awkを使う

同じことを行いますが、以下を使用してくださいawk

awk -F, '/^[[:digit:]]/{print $1}'

パイプラインと組み合わせる:

h5totxt hsli0.126.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | awk -F, '/^[[:digit:]]/{print $1}'

おすすめ記事