Saya mencoba menarik dua nilai numerik dari string dan menetapkannya ke variabel menggunakan awk( gawkadalah apa yang saya gunakan khusus). Saya ingin menarik nomor versi utama dan kecil dari string versi tmux ke dalam awkvariabel, misalnya:
- masukan
tmux 2.8:;maj == 2danmin == 8 - masukan
tmux 1.9a:;maj == 1danmin == 9 - masukan
tmux 2.10:;maj == 2danmin == 10
Dengan asumsi input saya berasal dari tmux -Vpada stdin, saat ini saya memiliki yang berikut:
tmux -V | awk '{
maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2);
min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2);
# ...do something with maj and min...
}'
Ini berfungsi, tetapi karena banyak pengguna tmux tahu, menggunakan if-shelldalam .tmux.conffile (di mana saya berharap untuk menggunakan hal ini) dapat dengan mudah mengarah ke garis yang sangat panjang dalam file konfigurasi, jadi saya bertanya-tanya apakah ada cara untuk menggabungkan kedua variabel ini tugas menjadi satu pernyataan untuk menghemat ruang ... atau cara lain untuk mendapatkan dua variabel ini dari input dan menghemat ruang.
Saya sedang memikirkan sesuatu seperti:
awk '{ maj, min = +gensub(/([0-9]+)\.([0-9]+).*/, "\\1 \\2", "g", $2); }'
... seperti di Python, tetapi sintaks tertentu tidak ada di awk. Apakah ada hal lain yang mungkin?
Perhatikan bahwa keterbacaan sebenarnya bukan masalah, hanya panjang.