Memiliki file dari konten berikut:
1111,2222,3333,4444
aaaa,bbbb,cccc,dddd
Saya berusaha mendapatkan file yang sama dengan aslinya tetapi tidak memiliki kolom ke-n seperti, untuk n = 2 (atau mungkin 3)
1111,2222,4444
aaaa,bbbb,dddd
atau, untuk n = 0 (atau mungkin 1)
2222,3333,4444
bbbb,cccc,dddd
File asli bisa panjang gigabita memiliki puluhan ribu kolom.
Seperti biasa dalam kasus seperti itu, saya menduga penyihir baris perintah dapat menawarkan solusi yang elegan ... :-)
Dalam kasus saya yang sebenarnya saya perlu menjatuhkan 2 kolom pertama, yang dapat dilakukan dengan menjatuhkan kolom pertama dua kali secara berurutan, tapi saya kira akan lebih menarik untuk menggeneralisasi sedikit.
text-processing
Ivan
sumber
sumber
,
? (Yaitu,,
hanya pernah digunakan sebagai pemisah lapangan.),
dan tidak pernah terjadi di dalam bidang.Jawaban:
Saya percaya ini khusus untuk memotong dari GNU coreutils:
Biasanya Anda menentukan bidang yang Anda inginkan melalui -f, tetapi dengan menambahkan --complement Anda membalikkan artinya, secara alami. Dari 'man cut':
Satu peringatan: jika salah satu kolom berisi koma, itu akan memotong, karena potong bukan pengurai CSV dengan cara yang sama seperti spreadsheet. Banyak parser memiliki gagasan berbeda tentang cara menangani pelolosan koma di CSV. Untuk kasus CSV sederhana, pada baris perintah, cut masih merupakan jalan yang harus ditempuh.
sumber
cut
karena itu bukan parser CSV. Jika bidang CSV memiliki pemisah bidang dalam nilainya, bidang itu dibungkus dengan tanda kutip. Btw, pada subjekcut
,-f
mengambil rentang bidang.cut -f, -d3-
akan menampilkan bidang ketiga aktif, menghapus dua yang pertama.cut -d, -f3-
Jika data hanya terbuat dari kolom yang dipisahkan koma:
Anda juga dapat menggunakan awk, tetapi agak canggung karena saat membersihkan bidang mudah, menghapus separator membutuhkan kerja. Jika Anda tidak memiliki bidang kosong, itu tidak terlalu buruk:
Jika Anda memiliki CSV aktual, di mana koma dapat muncul di dalam bidang jika dikutip dengan benar, Anda memerlukan pustaka CSV nyata .
sumber