Saya memiliki beberapa file teks yang berisi 12 baris dan 3 kolom.
Contoh:
2 6 0.74
42 6 0.58
80 6 0
112 6 0.24
132 6 1
216 6 0.7
342 6 0
390 6 0.21
432 6 0.56
466 6 0.75
524 6 0.6
646 6 0.9
Saya ingin mengatur semua nilai kolom ketiga ke 1 di semua baris.
Outputnya akan terlihat seperti ini:
2 6 1
42 6 1
80 6 1
112 6 1
132 6 1
216 6 1
342 6 1
390 6 1
432 6 1
466 6 1
524 6 1
646 6 1
Adakah yang tahu perintah yang bisa menyelesaikan masalah ini?
awk '{print $1, $2, "1"}' inputfile > newfile
mencoba
awk
$3 = 1
akan mengatur bidang ketiga ke 1sed (di sini GNU atau busybox
sed
dengan-i
opsi untuk mengedit di tempat)[0-9.]*$
adalah urutan dari0
ke9
dan.
hingga akhir baris.sed (golfed 4 byte)
[^ ]*$
karakter apa pun selain ruang, sampai akhir baris.sumber
sed 's/[^ ]*$/1/'
->awk
golf:awk \$3=1
(POSIX tetapi tidak akan bekerja dengan awk dari tahun 70-an seperti yang ditemukan di / bin pada Solaris)awk
solusi yang benar-benar keren .... dapat Anda menjelaskan plsGaris-garis dalam output yang diharapkan tampaknya berakhir dalam dua karakter spasi dan memiliki bidang yang dipisahkan oleh satu tab dan satu karakter spasi.
Jika memang itu yang Anda inginkan, maka Anda perlu:
Atau dengan
sed
:sumber
Cukup dengan GNU
sed
, gunakan-i
untuk mengganti teks langsung dalam file:Kolom dicocokkan oleh kelompok regex dalam kurung, menggunakan kembali mereka dengan
\1
dan\2
kemudian menggunakan "1" untuk menggantikan kelompok terakhir.Dalam kasus penggunaan ini, solusi yang diusulkan menggunakan
awk
bagus dan pendek juga.sumber
ini akan melakukan pekerjaan:
sumber
sumber