空のセルを埋め、タブで区切られたファイルのデータ型を同じにします。

空のセルを埋め、タブで区切られたファイルのデータ型を同じにします。

私はLinux上でほぼ2億行のタブで区切られたファイルを扱っています。バイナリ値を含む1つの列では、データ型が一貫しておらず、欠落している値がたくさんあることがわかりました。例は次のとおりです。

入力する:

timestamp    val
1589205592   0  
1589205593   0.0
1589205594  
1589205595   1
1589205595   1.0

推薦されたものを書いた。ここ私はawkを使用していますが、ファイルの容量がかなり大きく、非常に遅いようです。値をゼロで埋め、データ型を一貫して作成しようとしています。つまり、すべての浮動小数点をintに変換して現在のファイルを上書きしようとします。

出力:

timestamp    val
1589205592   0  
1589205593   0
1589205594   0
1589205595   1
1589205595   1

ベストアンサー1

awk 'BEGIN { FS=OFS="\t" } NR > 1 { $2 = sprintf("%d", $2) }; 1' file >file.new

その後、データを読み取り、新しいファイルに書き込みます。ここで、2番目の列のすべての数値は整数に変換されます(下降すると、欠落データは0になります)。

たとえば、小数点以下の2桁の浮動小数点出力が必要な場合は、呼び出しでフォーマット文字列として代わりに%.2f使用します。%dsprintf()

出力はタブで区切られます。

新しいファイルを直接目で確認したら、mv既存のファイルをそのファイルに置き換えます。

おすすめ記事