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