Aduh

Cara mencetak pelbagai lajur menggunakan perintah 'awk'

Cara mencetak pelbagai lajur menggunakan perintah 'awk'
Perintah 'awk' adalah salah satu dari banyak perintah yang dapat digunakan untuk mencetak pelbagai lajur dari data tabular di Linux. Perintah 'awk' boleh digunakan terus dari terminal dengan melaksanakan fail skrip 'awk'. Dalam tutorial ini, kami akan menunjukkan kepada anda cara mencetak pelbagai lajur dari data tabel.

Contoh 1: Mencetak pelbagai lajur dari output perintah

Perintah berikut akan mencetak lajur kedua, ketiga, dan keempat dari output perintah, 'ls-l'. Di sini, nombor lajur dinyatakan dengan jelas, tetapi arahan yang lebih cekap untuk mencetak julat lajur yang sama ditunjukkan dalam contoh seterusnya.

$ ls -l | awk 'cetak $ 2, $ 3, $ 4'

Output berikut dihasilkan oleh arahan di atas.

Contoh 2: Cetak julat lajur dari fail dengan menggunakan a untuk gelung

Untuk mengikuti contoh ini dan contoh lain dalam tutorial ini, buat fail teks bernama tanda.txt dengan kandungan berikut:

ID CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

Perintah 'awk' berikut akan mencetak tiga lajur tanda pertama.txt. The untuk gelung digunakan untuk mencetak nilai lajur, dan gelung merangkumi tiga langkah. The NF pemboleh ubah menunjukkan jumlah bilangan medan atau lajur fail.

$ tanda kucing.txt
$ awk 'untuk (i = 1; i<=NF-1;i++) printf $i" "; print ""' marks.txt

Output berikut akan dihasilkan dengan menjalankan perintah. Keluaran menunjukkan pelajar ID dan tanda untuk CSE203 dan CSE102.

Contoh 3: Cetak julat lajur dengan menentukan pemboleh ubah permulaan dan akhir

Perintah 'awk' berikut akan mencetak tiga lajur pertama dari output perintah 'ls -l' dengan memulakan bermula dan penamat pemboleh ubah. Di sini, nilai bermula pemboleh ubah adalah 1, dan nilai pengakhiran pemboleh ubah ialah 3. Pemboleh ubah ini diulang dalam gelung untuk mencetak nilai lajur.

$ ls -l | awk 'BEGIN first = 1; terakhir = 3
untuk (i = pertama; i < last; i++) printf("%s ", $i) print $last '

Output berikut akan muncul setelah menjalankan perintah. Output menunjukkan nilai tiga lajur pertama output, 'ls -l'.

Contoh 4: Mencetak pelbagai lajur dari fail dengan pemformatan

Perintah 'awk' berikut akan mencetak tiga lajur pertama tanda.txt menggunakan printf dan pemisah medan output (OFS). Di sini, untuk untuk gelung merangkumi tiga langkah, dan tiga lajur akan dicetak mengikut urutan dari fail. OFS digunakan di sini untuk menambahkan ruang antara lajur. Apabila nilai pembilang gelung (i) sama dengan pengakhiran pemboleh ubah, maka barisan baru (\ n) dihasilkan.

$ tanda kucing.txt
$ awk -v start = 1 -v end = 3 'untuk (i = mula; i<=end;i++) printf("%s%s",
$ i, (i == akhir) ? "\ n": OFS) tanda.txt

Output berikut akan dihasilkan setelah menjalankan perintah di atas.

Contoh 5: Cetak julat lajur dari fail menggunakan pernyataan bersyarat

Perintah 'awk' berikut akan mencetak lajur pertama dan terakhir dari fail dengan menggunakan pernyataan untuk gelung dan pernyataan if. Di sini, gelung untuk merangkumi empat langkah. The bermula dan pengakhiran pemboleh ubah digunakan dalam skrip untuk menghilangkan lajur kedua dan ketiga dari fail dengan menggunakan syarat if. Pemboleh ubah OFS digunakan untuk menambahkan ruang antara lajur, dan pemboleh ubah ORS digunakan untuk menambahkan baris baru (\ n) setelah mencetak lajur terakhir.

$ tanda kucing.txt
$ awk -v start = 2 -v end = 3 'untuk (i = 1; i<=NF;i++)
jika (i> = mulakan && i<=end) continue;
printf lain ("% s% s", $ i, (i!= NF) ? OFS: ORS) '.txt

Output berikut akan muncul setelah menjalankan perintah di atas. Keluaran menunjukkan lajur tanda pertama dan terakhir.txt.

Contoh 6: Cetak julat lajur dari fail menggunakan pemboleh ubah NF

Perintah 'awk' berikut akan mencetak lajur pertama dan terakhir dari fail dengan menggunakan pemboleh ubah NF. Tidak ada gelung atau pernyataan bersyarat yang digunakan untuk mencetak nilai lajur. NF menunjukkan bilangan medan. Terdapat empat lajur dalam tanda.txt. $ (NF-3) menentukan lajur pertama, dan $ NF menunjukkan lajur terakhir.

$ tanda kucing.txt
$ awk 'print $ (NF-3) "" $ NF' tanda.txt

Output berikut dihasilkan dengan menjalankan perintah di atas. Keluaran menunjukkan lajur tanda pertama dan terakhir.txt.

Contoh 7: Cetak julat lajur dari fail menggunakan substr () dan index ()

Fungsi index () mengembalikan kedudukan jika nilai argumen kedua wujud pada nilai argumen pertama. Fungsi substr () boleh mengambil tiga argumen. Argumen pertama adalah nilai rentetan, argumen kedua adalah kedudukan permulaan, dan argumen ketiga adalah panjang. Argumen ketiga substr () dihilangkan dalam perintah berikut. Kerana lajur bermula dari $ 1 dalam perintah 'awk', fungsi index () akan mengembalikan $ 3, dan perintah akan dicetak dari $ 3 hingga $ 4.

$ tanda kucing.txt
$ awk 'print substr ($ 0, index ($ 0, $ 3))' tanda.txt

Output berikut akan dihasilkan dengan menjalankan perintah di atas.

Contoh 8: Mencetak rangkaian lajur dari satu fail dengan menggunakan printf secara berurutan

Perintah 'awk' berikut akan mencetak lajur tanda pertama, kedua dan ketiga.txt dengan menetapkan ruang yang cukup untuk 10 aksara.

$ tanda kucing.txt
$ awk '// printf "% 10s% 10s% 10s \ n", $ 1, $ 3, $ 2' markah.txt

Output berikut akan dihasilkan dengan menjalankan perintah di atas.

Kesimpulannya

Terdapat pelbagai cara untuk mencetak pelbagai lajur dari output perintah atau fail. Tutorial ini menunjukkan bagaimana arahan 'awk' dapat membantu pengguna Linux mencetak kandungan dari data tabular.

Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...
Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...
5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...