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 }
.