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 trmembutuhkan dua argumen - set karakter untuk diganti, dan penggantiannya. Dalam hal ini kami hanya memiliki set 1 karakter. Kami mengarahkan aliran stdin input.csvinput trmelalui <operator shell, dan menyalurkan output yang dihasilkan ke tr -d '"'untuk menghapus tanda kutip ganda.
Tetapi awkbisa 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 1di 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 1mencetak hasilnya.
Gunakan pengalihan shell ( >) untuk mengirim output ke file baru:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv