私は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
使用します。%d
sprintf()
出力はタブで区切られます。
新しいファイルを直接目で確認したら、mv
既存のファイルをそのファイルに置き換えます。