Awk - ganti satu karakter hanya di kolom tertentu

13

Saya punya file seperti ini:

2018.01.02;1.5;comment 1
2018.01.04;2.75;comment 2
2018.01.07;5.25;comment 4
2018.01.09;1.25;comment 7

Saya ingin mengganti semua titik .di kolom kedua dengan koma ,seperti yang saya lakukan dengan sed 's/\./\,/g' filebagaimana saya bisa menggunakan sedatau lebih baik awkhanya menerapkan ini untuk kolom kedua, sehingga output saya akan terlihat seperti ini:

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
nath
sumber

Jawaban:

22
$ awk 'BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1' ip.txt
2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
  • BEGIN{} blok kode ini akan dieksekusi sebelum memproses setiap jalur input
  • FS=OFS=";" atur pemisah bidang input dan output sebagai ;
  • gsub(/\./, ",", $2)untuk setiap jalur input, ganti semua bidang ke- .2 dengan,
  • 1adalah idiom awk untuk mencetak konten $0(yang berisi catatan input)
Sundeep
sumber
1
luar biasa, banyak THX!
nath
9
sed 's/\./,/3' file

ganti kemunculan titik ketiga

Emilio Galarraga
sumber
2
Penggunaan Useles Lain untuk cat... Mengapa tidak adil sed 's/\./,/3' file? (Juga, koma tidak perlu diloloskan.)
twalberg
Saya memperhitungkan pengamatan
Emilio Galarraga
cattidak akan sia-sia di sini. Itu akan memungkinkan operasi untuk menggunakan 2 core.
ron rothman
@ronrothman apa tujuan menjalankan inti cat, selain menggunakan sumber daya? Mungkin memberikan sedikit penyangga, tetapi kemudian niat ini harus lebih baik diungkapkan oleh alat seperti bufferdaripada oleh cat.
Roland Illig
Untuk memisahkan disk (pemblokiran) membaca dari penggantian string. Ya, saya kira Anda dapat menganggapnya sebagai buffering.
ron rothman
4

Dilakukan dengan metode di bawah ini menggunakan awk

Perintah: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

keluaran

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
Praveen Kumar BS
sumber