GNU/Linux >> Belajar Linux >  >> Linux

Hapus Koma Antara Kutipan Hanya Dalam File Yang Dibatasi Koma?

Saya memiliki file input yang dibatasi dengan koma (, ). Ada beberapa bidang yang diapit oleh tanda kutip ganda yang memiliki koma di dalamnya. Ini contoh barisnya

123,"ABC, DEV 23",345,534.202,NAME

Saya perlu menghapus semua koma yang terjadi di dalam tanda kutip ganda dan tanda kutip ganda juga. Jadi baris di atas harus diuraikan menjadi seperti yang ditunjukkan di bawah ini

123,ABC DEV 23,345,534.202,NAME

Saya mencoba yang berikut ini menggunakan sed tetapi tidak memberikan hasil yang diharapkan.

sed -e 's/(".*),(".*)/1 2/g'

Trik cepat apa pun dengan sed , awk atau utilitas unix lainnya?

Jawaban yang Diterima:

Jika kutipan seimbang, Anda akan ingin menghapus koma di antara setiap kutipan lainnya, ini dapat dinyatakan dalam awk seperti ini:

awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile

Keluaran:

123,ABC DEV 23,345,534.202,NAME

Penjelasan

-F" membuat awk memisahkan baris pada tanda kutip ganda, yang berarti setiap bidang lainnya akan menjadi teks antar kutip. For-loop menjalankan gsub , kependekan dari pengganti global, pada setiap bidang lain, menggantikan koma ("," ) tanpa apa-apa ("" ). 1 pada akhirnya memanggil blok kode default:{ print $0 } .


Linux
  1. Bash Script Untuk Menghapus File Terlama Dari Folder A?

  2. Perbedaan Antara Tautan Simbolik dan Tautan Keras?

  3. Ganti Data Antara Kutipan Dalam File?

  1. Cara menggunakan sed untuk menghapus n baris terakhir dari sebuah file

  2. Cara hanya mendapatkan jumlah baris file

  3. Apa perbedaan antara fsync dan syncfs?

  1. Perbedaan Antara "du -sh *" Dan "du -sh ./*"?

  2. cara menghapus tanda kutip ganda di csv

  3. Grep dalam file log besar (>14 GB) hanya x GB terakhir?