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