Cara yang jauh lebih sederhana adalah menggunakan tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Cara kerjanya adalah tr
membutuhkan dua argumen - set karakter untuk diganti, dan penggantiannya. Dalam hal ini kami hanya memiliki set 1 karakter. Kami mengarahkan aliran stdin input.csv
input tr
melalui <
operator shell, dan menyalurkan output yang dihasilkan ke tr -d '"'
untuk menghapus tanda kutip ganda.
Tetapi awk
bisa melakukannya juga.
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
Cara kerjanya sedikit berbeda: awk membaca setiap file baris demi baris, setiap skrip in-line menjadi /Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. Di sini kita tidak memiliki pola, jadi itu berarti mengeksekusi kode kunci untuk setiap baris. gsub()
fungsi digunakan untuk substitusi global dalam satu baris, jadi kami menggunakannya untuk mengganti garis bawah dengan koma, dan tanda kutip ganda dengan string nol (secara efektif menghapus karakter). Ada 1
di tempat pencocokan pola dengan blok kode yang hilang, yang secara default hanya untuk mencetak baris; dengan kata lain kode kunci dengan gsub()
melakukan pekerjaan dan 1
mencetak hasilnya.
Gunakan pengalihan shell ( >
) untuk mengirim output ke file baru:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv
Sama seperti alternatif, Anda juga dapat menggunakan
sed
perintah ini :sumber
Perl, "gergaji tentara Swiss" dari pemrosesan teks baris perintah, juga dapat melakukan ini. Sintaksnya (tidak secara kebetulan) sangat mirip dengan
tr
dansed
contoh:atau:
Tapi jujur, jika Anda tidak ingin meluangkan waktu untuk mempelajari bahasa pemrograman baru (yang benar-benar awk, Perl dan sed dan alat-alat lain seperti mereka) hanya untuk tugas dasar ini, Anda bisa melakukannya di editor teks apa pun yang mendukung pencarian dan ganti:
Buka file CSV di editor teks favorit Anda (seperti gedit, kate, mousepad, dll.; Bahkan Notepad atau Wordpad lama yang biasa di Windows dapat melakukan ini).
Pilih "Cari dan Ganti" dari menu (biasanya ditemukan di bawah "Edit", jika tidak ada menu "Cari" yang terpisah).
Masukkan
_
ke dalam kotak pencarian, dan,
ke dalam kotak pengganti.Klik "Ganti Semua".
Ulangi dengan
"
di kotak pencarian dan tidak ada di kotak pengganti.Simpan file.
Sekarang, jika Anda perlu melakukan ini untuk 100 atau 1000 file, bukan hanya satu, maka mempelajari alat baris perintah baru mulai masuk akal. Dan, tentu saja, setelah Anda tahu cara menggunakan Perl atau sed atau apa pun, maka Anda akan menghemat banyak waktu dan upaya dengan tugas serupa nanti. Tetapi untuk pekerjaan sekali saja yang tidak Anda harapkan perlu dilakukan lagi, terkadang alat interaktif dasar seperti editor teks adalah solusi paling sederhana.
sumber
Anda bisa melakukan ini
vim
juga.Buka file:,
vim input.csv
lalu gunakanvim
alat pencarian lanjutans
. Ketik titik dua (:
) untuk masuk ke mode perintah, dan jalankan perintah seperti ini:Cukup banyak perintah yang sama seperti dalam jawaban IanC, tetapi di dalam
vim
daripada menggunakansed
.sumber
Mengapa tidak hanya mengubah nilai default input dan output nilai Separator
sumber