7GB CSVファイルの行を編集するには?

7GB CSVファイルの行を編集するには?

サイズが7GB以上で、行が30Mの.csvファイルがあります。 SQL Server のデータベース テーブルにファイルを読み込むと、不足しているフィールドによっては、書式設定の問題のある行の場所が報告されます。

lessを使用して、位置(つまり行番号)を持つ行を表示できます。

less +24923786 -N huge.csv

Emacsで開こうとしましたが、Emacsで開くには大きすぎます。普通ですか? (私は実際にWindowsでgit bashとポータブルEmacsを使用していますless。したがって、本格的なEmacsがそれを開いてその行を編集できるかどうかはわかりません。)

CSVファイルの行を編集するには? (私はLinuxのツールやgit bashで利用可能ないくつかのエディタ、またはWindows用のポータブルバージョンに興味があります。)

ありがとうございます。

答え1

ed行を簡単に編集できます。c行を変更(交換)するコマンドです。行自体のピリオドは、wq変更されたファイルをディスクに書き換えて終了するという信号です。

$ ed huge.csv
24923786c
new,data,goes,here
.
wq

またはbash "one" - ライナーで:

$ ed -s huge.csv <<< $'24923786c
new,data,goes,here
.
wq
'

答え2

エディタで実際に1行を編集するには、sed次のように行を抽出して編集してから再接続します(互換バージョンまたはgit-bashのsedが必要です)。

sed '24923786,24923786p' -n huge.csv  > line.txt
edit line.txt
sed '24923786,24923786{s/.*/cat line.txt/e;}' -i huge.csv

まず、テストしてバックアップを作成します(オプションのsuffixパラメータを使用できます。iたとえば、-i.baksedに自動的に元のファイルをバックアップすることができますhuge.csv.bak)。


余談:巨大なテキストファイルで一連の行を開いて編集できるように特別にサポートするエディタがない場合は驚きます。しかし、私はそれについて知りませんでした。私が知っているのは、わずかに大きなファイルを処理するときにgedit(私のgotoエディタ)がひどくクラッシュし、vscodeがより良いことをしているようですが、最近はそれ以上を処理する必要がないということです。

関連情報