質問: 大きなcsvファイルのインデックスの再作成 この役立つスレッド で答えを調べましたが、私の問題は十分に異なっているようで、良い答えを考えることができません(少なくともsedでは)。次のような行を持つ大きなcsvファイル(200 gb以上)があります。<alphanumerical_identifier>,<number> どこ <alphanumerical_identifier>はファイル全体で一意です。 最初の列をインデックスに置き換える別のファイルを作成したいと思います。<index>,<number> 次のようになります。1, <number> 2, <number> 3, <number> awkは、ファイル全体をメモリにロードせずに、増加するインデックスを生成できますか?インデックスは単調に増加するため、インデックスを削除する方がよい場合があります。そのための解決策はそれとは異なりますか?つまり:<number> <number> <number>
回答: ここにいくつかのアプローチがありますが、上記のcutおよびnlソリューションの速度に近づくものはありません。 awk awk -f, '{$1=nr;print $1","$2;}' file.csv > newfile.csv perl perl -pe 's/[^,]+/$./' file.csv > newfile.csv または perl -f, -ane '$f[0]=$.; print join ",", @f' file.csv シェル(ただし、200gファイルにはお勧めしません。時間がかかります) i=1; while ifs=, read foo num; do printf "%d,%s\n" $((i++)) $num; done < file.csv > newfile.csv 上記のソリューションは、速度の順に並べ替えられています。私は自分のラップトップと40mファイルでテストしましたが、シェルには2.2282(awk)、2.4555(1番目のperl)、3.1825s(2番目のperl)、そしてなんと48.6035秒かかりました。すでにお持ちの非常に賢いcutおよびnlソリューションは、0.6078秒で約4倍高速でした。