Jika Anda ingin:
tambahkan ini ke skrip yang ada.
Anda dapat memasukkan \"\"
tambahan di setiap argumen print
seperti ini:
print "\"admin\"", "\"base\"", ...
Diedit:
Ya, mungkin menyetel OFS adalah solusi yang lebih baik:
BEGIN { OFS="\";\""; } ... print "\"admin", ...., "simple\"";
awk '{for (i=1;i<=NF;i++) $i="\""$i"\""}1' FS=";" OFS=";" input
Untuk menambahkan kutipan di sekitar entri, Anda dapat menggunakan loop AWK sederhana:
Skrip - simple_loop.awk
BEGIN {FS=";"}
{
for(i=1;i<NF;i++){
printf("\"%s\";", $i);
}
printf("\"%s\"\n",$NF);
}
Misalnya
echo "admin;base;5.11 HOLSTER SHIRT L WHITE;;" | awk -f simple_loop.awk
Harus keluar
"admin";"base";"5.11 HOLSTER SHIRT L WHITE";"";""
Dalam hal ini saya akan menggunakan sed
ekspresi, bukan AWK.
Jika data Anda ada dalam file bernama data.txt
, Anda bisa membuatnya menulis:
sed "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt
Itu akan mencetak hasilnya ke output std, tetapi jika Anda ingin mengganti konten file, gunakan saja sed -i
dengan cara ini:
sed -i "s/;/\";\"/g;s/^/\"/;s/$/\"/" data.txt
Dan itu saja!!
Penjelasan: sed
ekspresi terdiri dari tiga sed
perintah dipisahkan oleh ";" yang dapat Anda jalankan secara terpisah:
sed "s/;/\";\"/g
Itu membuat substitusi (itulah yang berarti "s" pertama), lalu "/" (pemisah default), ";" itulah yang ingin kita ganti. Kemudian pemisah kedua "/", dan penggantinya:\";\"
Ini adalah urutan:kutipan yang lolos, titik koma dan kutipan yang lolos. Jadi dengan perintah ini kita akan mengganti titik koma ;
oleh ";"
. /g
terakhir artinya setiap ;
akan diganti (bukan hanya titik koma pertama).
Jika masukannya adalah a;b;c
setelah menjalankan perintah pertama ini akan menjadi a";"b";"c
.
Sekarang kita perlu menambahkan tanda kutip di awal (^
dalam ekspresi reguler) dan pada akhirnya ($
). Jadi itulah artinya:
sed "s/^/\"/" // the first quote
Dan
sed "s/$/\"/" // the last quote
Mendapatkan keluaran yang diinginkan:
"a";"b";"c"