Diberikan substring berikut yang diberikan dari perintah df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Saya ingin mengekstrak 1952971772
dan 74%
dari string itu, untuk menggunakannya dalam skrip bash.
Saya tahu saya bisa menggunakan beberapa perintah cut atau sesuatu, tetapi tidak akan berfungsi lagi jika ukurannya berubah, misalnya.
Saya juga memiliki pemikiran tentang menggunakan regex atau sesuatu, tetapi saya ingin memiliki pendekatan yang paling direkomendasikan.
Terima kasih sebelumnya!
command-line
bash
Nicolas DUVOISIN
sumber
sumber
df
khususnya? Jika yang terakhir, Anda dapat menentukan bidang output tertentu secara eksplisit misalnyadf --output=pcent /dev/sdb1
cut
posisi karakter on line yang membuatnya gagal ketika panjang garis berubah dengan fluktuasi ukuran file. Saya percaya Anda dapat memberitahucut
untuk memilih kolom2
dan kolom yang5
digambarkan oleh spasi tetapi saya sedang menelepon dan tidak dapat meneliti dan memposting jawaban secara efektif.cut
akan melihat satu kolom setelah setiap pembatas.Jawaban:
untuk persentase dan
untuk ukuran.
Tanpa
tail
:awk '{ print $2 }'
mendapatkan kolom ke-2 di mana banyak pemisah dihitung sebagai 1. Jadi kolom ke-2 selalu sama untuk sistem Anda untuk bagian pertama dari perintah.
NR
memberi Anda jumlah total catatan yang sedang diproses atau nomor baris.sumber
df /home | awk '{print $2; print $5;}'
.END
blok jadi alih-alih menggunakantail
hanya gunakanawk 'END { print $2,$5}'
Jawaban yang diedit
Seperti yang dinyatakan @kevin, Anda dapat menggunakan
awk
untuk memilih hanya baris terakhir dan menghindari penggunaan ekor sama sekali dengan menggunakanEND
dan juga jika Anda ingin mencetak dua kolom sekaligus Anda dapat melakukan ini:Jawaban asli
Anda dapat memilih kolom ke-2 saja:
Di mana
$2
menunjukkan posisi kolom yang dipisahkan TAB. Anda dapat menggunakannyacut
karena hanya menangani satu kemunculan TAB dan di sini ada beberapa TAB untuk membatasi kolom.sumber
END
blok jadi alih-alih menggunakantail
hanya gunakanawk 'END { print $2,$5}'