完全に数字の行のみを印刷

完全に数字の行のみを印刷

テキストファイルをフィルタリングしたい。ただ各列が有効な浮動小数点数である行を印刷します。たとえば、

3 6 2 -4.2 21.2 
3 x 4.2 21.2 
3 2 2.2.2

最初の行だけが有効な浮動小数点数xとして渡されます。単に2.2.2各セクションでチャンクを.splits()実行するPythonスクリプトを書くことができますが、try/exceptファイルが大きいと速度が遅くなります。入力ファイルに不明な数の可変長列があり、科学的表記法を使用しません。awk解決策がありますか?

ベストアンサー1

awk '
    # skip any obvious stuff
    /[^0-9. -]/ {next}
    {
        # test each field for a number
        for (i=1; i<=NF; i++) 
            if ($i + 0 != $i)
                next
        print
    }
'

これにより、科学表記の有効数字が区別されます。1.2e1 == 12

おすすめ記事