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.