GNU/Linux >> Belajar Linux >  >> Linux

Tambahkan tanda kutip ganda di sekitar bidang dalam keluaran skrip AWK?

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"

Linux
  1. Skrip gawk untuk mengonversi kutipan pintar

  2. Bagaimana Cara Menambahkan Baris Baru Ke Variabel Dalam Skrip Bash?

  3. Tambahkan skrip bash ke jalur

  1. Bash Script:Bagaimana Menetapkan Setiap Baris Perintah Output Ke Nilai Dalam Array?

  2. Tambahkan Kolom ke akhir file CSV menggunakan 'awk' dalam skrip BASH

  3. MYSQL berbeda dalam Keluaran dari skrip

  1. Bash menangkap output dari awk ke dalam array

  2. Hapus baris kosong menggunakan sed

  3. Indentasi output multi-baris dalam skrip shell