Saya memiliki sembilan kolom di file .csv saya saat ini, namun, kolom ke-2 dan ke-3 kosong dan saya ingin menyingkirkannya. Apakah ada cara untuk menggunakan perintah batch untuk menghapus kolom kosong ini dari .csv saya atau mengekspor .csv baru tanpa kolom kosong itu?
windows
command-line
batch
csv
batchnoober
sumber
sumber
Jawaban:
For /F
mampu mem-parsing file .csv. Dalam satu baris, dijalankan langsung dari command prompt:Ini melintasi baris input.csv untuk baris dan menggunakan koma sebagai pembatas, menyimpan nilai pertama di
%i
, kedua di%j
, ketiga di%k
dan sisa string (dengan menggunakan tanda bintang di daftar token) di%l
. Dengan mencetak semua kecuali nilai kedua dan ketiga, Anda secara efektif mengeluarkannya.Namun,
for /F
tidak menghitung string kosong sebagai token, sehingga perintah tidak dapat membedakan antara dua koma berikutnya dan satu. Solusi ini berfungsi jika kolom kosong memiliki karakter spasi, tetapi dapat melewati kolom yang salah.Untuk menghindari pembatasan ini, kita bisa menulis file batch yang menggunakan penggantian string untuk menyisipkan spasi antara dua koma berikutnya. Penggantian ini dilakukan dua kali untuk mengatasi kemungkinan tiga koma. Kutipan dalam
^"!line!^"
diperlukan untuk menunjukkanfor /F
harus beroperasi pada string, bukan file dan melarikan diri untuk mencegah!line!
dievaluasi sebagai string literal, bukan variabel.Hasilnya adalah file .csv baru, identik dengan input.csv, kecuali untuk kolom kedua dan ketiga yang dihilangkan.
sumber
The,quick,brown,fox,,,the,lazy,dog
akan menjadiThe,,,fox, , ,the,lazy,dog
.Anda tidak menentukan OS mana. Jika milik Anda datang
cut
, gunakan ini.-d
set pembatas, dalam hal ini menjadi a,
. Karena koma bukan karakter khusus, Anda dapat menghilangkan tanda kutip.-f
memilih bidang, dalam hal ini bidang 1 dan bidang 4 hingga 9 (melewatkan bidang 2 dan 3).Tes sebenarnya dari perintah:
Cut sudah diinstal sebelumnya dengan sebagian besar sistem operasi (misalnya, OS / X, distribusi Linux, BSD, Solaris, ...; hampir semua orang kecuali DOS dan Windows).
Jika Anda memiliki Windows, Anda dapat:
cut
perintah dalam file batch.sumber
for /f "tokens=5 delims= " %i in (file.txt) DO echo %i
-f1,4-
untuk memasukkan semua kolom setelah kolom ketiga.4-
berarti4-∞
.-f4-9
pada kalimat pertama dari posting OP "Saya punya sembilan kolom", tetapi-f4-
lebih fleksibel kurang mengetik. Opsi lain akan digunakansed
.Saya akan membuka file CSV di Notepad (atau editor teks apa pun) dan mencari dan menggantinya
,,
dengan,
. Ini, tentu saja, dengan asumsi data di kolom Anda tidak ada,,
di dalamnya.sumber
Dengan asumsi Anda menggunakan Windows, file tidak memiliki header, dan Anda memiliki Powershell tersedia untuk Anda, Anda dapat menggunakan sesuatu seperti berikut:
Sehingga:
sumber