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

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)

1
luar biasa, banyak THX!
— nath

9
sed 's/\./,/3' file

ganti kemunculan titik ketiga


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.