GNU/Linux >> Belajar Linux >  >> Linux

Mengganti garis bawah dengan koma dan menghapus tanda kutip ganda di CSV

Cara yang jauh lebih sederhana adalah dengan 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 - kumpulan karakter yang akan diganti, dan penggantinya. Dalam hal ini kami hanya memiliki set 1 karakter. Kami mengalihkan input.csv masukan tr aliran stdin melalui < operator shell, dan menyalurkan output yang dihasilkan ke tr -d '"' untuk menghapus tanda kutip ganda.

Tapi 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 sebaris adalah /Pattern match/{ codeblock}/Another pattern/{code block for this pattern} . Di sini kita tidak memiliki pola, jadi artinya mengeksekusi kode blok untuk setiap baris. gsub() fungsi digunakan untuk penggantian global dalam satu baris, jadi kami menggunakannya untuk mengganti garis bawah dengan koma, dan tanda kutip ganda dengan string nol (menghapus karakter secara efektif). 1 menggantikan pencocokan pola dengan blok kode yang hilang, yang standarnya hanya untuk mencetak baris; dengan kata lain codeblock dengan gsub() melakukan tugasnya dan 1 mencetak hasilnya.

Gunakan pengalihan shell (> ) untuk mengirim output ke file baru:

 awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv

Sebagai alternatif, Anda juga bisa menggunakan sed ini perintah:

$ sed -e 's/_/,/g' -e 's/"//g' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

Perl, "gergaji tentara Swiss" dari pemrosesan teks baris perintah, juga dapat melakukan ini. Sintaksnya (bukan kebetulan) sangat mirip dengan tr dan sed contoh:

perl -pe 'tr/_"/,/d' input.csv > result.csv

atau:

perl -pe 's/_/,/g; s/"//g' input.csv > result.csv

Tapi sejujurnya, jika Anda tidak ingin meluangkan waktu untuk mempelajari bahasa pemrograman baru (yang sebenarnya adalah awk, Perl dan sed dan alat lain seperti itu) hanya untuk tugas dasar ini, Anda juga bisa melakukannya di editor teks apa pun yang mendukung pencarian dan penggantian:

  1. Buka file CSV di editor teks favorit Anda (seperti gedit, kate, mousepad, dll.; bahkan Notepad atau Wordpad lama di Windows dapat melakukannya).

  2. Pilih "Telusuri dan Ganti" dari menu (biasanya ditemukan di bawah "Edit", jika tidak ada menu "Telusuri" yang terpisah).

  3. Masukkan _ ke dalam kotak telusur, dan , ke dalam kotak pengganti.

  4. Klik "Ganti Semua".

  5. Ulangi dengan " di kotak telusur dan tidak ada apa pun di kotak pengganti.

  6. 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 mengetahui cara menggunakan Perl atau sed atau apa pun, Anda akan menghemat banyak waktu dan tenaga dengan tugas serupa nanti. Namun untuk pekerjaan satu kali yang tidak perlu Anda lakukan lagi, terkadang alat interaktif dasar seperti editor teks adalah solusi paling sederhana.


Linux
  1. Mengapa The Tilde (~) Tidak Memperluas Di Dalam Kutipan Ganda?

  2. Perbedaan Antara "...", '...', $'...', Dan $"..." Kutipan Di Shell?

  3. Apa Mnemonic yang Baik Untuk Shell Double Vs. Kutipan Tunggal?

  1. Membuat dan Menghapus File dan Direktori Di Linux

  2. Mengupas tanda kutip tunggal dan ganda dalam sebuah string hanya menggunakan perintah bash / standar Linux

  3. Tambahkan tanda kutip ganda di sekitar bidang dalam keluaran skrip AWK?

  1. Kapan Mengutip Ganda Diperlukan?

  2. Menghapus file dengan rm menggunakan find dan xargs

  3. cara menghapus tanda kutip ganda di csv