Aduh

Cara Memisahkan Fail Rentetan dengan Awk

Cara Memisahkan Fail Rentetan dengan Awk
Perintah awk Linux (disingkat dari nama pemaju; Aho, Weinberger, dan Kernighan) adalah cara yang baik untuk memproses dan menganalisis fail rentetan. Agar fail lebih bermaklumat, file harus disusun dalam bentuk baris dan lajur. Kemudian, anda boleh menggunakan awk pada fail ini untuk:

Dalam artikel ini, kami akan menerangkan penggunaan asas perintah awk dan bagaimana ia dapat digunakan untuk memisahkan fail rentetan. Kami telah memberikan contoh dari artikel ini pada sistem Debian 10 Buster tetapi ia dapat ditiru dengan mudah di kebanyakan distro Linux.

Fail contoh yang akan kita gunakan

Contoh fail rentetan yang akan kita gunakan untuk menunjukkan penggunaan perintah awk adalah seperti berikut:

Inilah yang ditunjukkan oleh setiap lajur fail contoh:

Contoh 1: Gunakan Awk untuk mencetak semua baris fail

Mencetak setiap baris fail yang ditentukan adalah tingkah laku lalai dari perintah awk. Dalam sintaks perintah awk berikut, kami tidak menentukan corak apa yang harus dicetak oleh awk, oleh itu perintah tersebut seharusnya menerapkan tindakan "mencetak" ke semua baris fail.

Sintaks:

$ nama awk 'print' nama fail.txt

Contoh:

Dalam contoh ini, saya memberitahu arahan awk untuk mencetak kandungan fail sampel saya, baris demi baris.

$ awk 'print' sample_file.txt

Contoh 2: Gunakan awk untuk mencetak hanya garis yang sesuai dengan corak tertentu

Dengan awk, anda boleh menentukan corak dan perintah hanya akan mencetak garis yang sesuai dengan corak itu.

Sintaks:

nama fail $ awk '/ pattern_to_be_matched / print'.txt

Contoh:

Dari contoh fail, jika saya ingin mencetak hanya baris yang mengandungi pemboleh ubah 'B', saya dapat menggunakan perintah berikut:

$ awk '/ B / print' sample_file.txt

Untuk menjadikan contoh lebih bermakna, izinkan saya mencetak hanya maklumat mengenai pekerja yang merupakan 'profesor.

$ awk '/ profesor / print' sample_file.txt

Perintah hanya mencetak baris / entri yang mengandungi rentetan "profesor" sehingga kita mempunyai maklumat yang lebih berharga yang berasal dari data.

Contoh 3. Gunakan awk untuk memisahkan fail sehingga hanya bidang / lajur tertentu yang dicetak

Daripada mencetak keseluruhan fail, anda boleh membuat awk untuk mencetak lajur fail tertentu sahaja. Awk memperlakukan semua perkataan, dipisahkan dengan ruang kosong, dalam baris sebagai rakaman lajur secara lalai. Ia menyimpan rekod dalam pemboleh ubah $ N. Di mana $ 1 mewakili kata pertama, $ 2 menyimpan perkataan kedua, $ 3 keempat, dan seterusnya. $ 0 menyimpan keseluruhan baris sehingga baris siapa dicetak, seperti yang dijelaskan dalam contoh 1.

Sintaks:

$ awk 'cetak $ N, .. .' nama fail.txt

Contoh:

Perintah berikut hanya akan mencetak lajur pertama (nama) dan lajur kedua (subjek) fail sampel saya:

$ awk 'print $ 1, $ 2' sample_file.txt

Contoh 4: Gunakan Awk untuk mengira dan mencetak bilangan garis yang sesuai dengan corak

Anda boleh memberitahu awk untuk mengira bilangan garis di mana corak tertentu dipadankan dan kemudian mengeluarkan yang 'menghitung'.

Sintaks:

$ awk '/ pattern_to_be_matched / ++ cnt TAMAT print "Count =", cnt'
nama fail.txt

Contoh:

Dalam contoh ini, saya ingin mengira jumlah orang yang mengajar subjek "english". Oleh itu, saya akan memberitahu perintah awk untuk memadankan corak "bahasa inggeris" dan mencetak bilangan garis yang sesuai dengan corak ini.

$ awk '/ english / ++ cnt TAMAT print "Count =", cnt' sample_file.txt

Kiraan di sini menunjukkan bahawa 2 orang mengajar bahasa Inggeris dari contoh fail fail.

Contoh 5: Gunakan awk untuk mencetak hanya baris dengan lebih daripada bilangan watak tertentu

Untuk tugas ini, kita akan menggunakan fungsi awk bawaan yang disebut "panjang". Fungsi ini mengembalikan panjang rentetan input. Oleh itu, jika kita ingin awk hanya mencetak baris dengan lebih daripada, atau bahkan kurang daripada jumlah aksara, kita boleh menggunakan fungsi panjang dengan cara berikut:

Untuk garis percetakan dengan aksara lebih besar daripada nombor:

$ awk 'length ($ 0)> nama fail n'.txt

Untuk mencetak baris dengan aksara kurang daripada nombor:

$ awk 'panjang ($ 0) < n' filename.txt

Di mana n adalah bilangan aksara yang ingin anda tentukan untuk garis.

Contoh:

Perintah berikut hanya akan mencetak baris dari fail sampel saya yang mempunyai aksara lebih dari 30:

$ awk 'panjang ($ 0)> 30' sample_file.txt

Contoh 6: Gunakan awk untuk menyimpan output perintah ke fail lain

Dengan menggunakan operator pengalihan '>', anda boleh menggunakan perintah awk untuk mencetak outputnya ke fail lain. Ini adalah cara anda boleh menggunakannya:

nama fail $ awk 'criteria_to_print ".txt> outputfile.txt

Contoh:

Dalam contoh ini, saya akan menggunakan operator pengalihan dengan arahan awk saya untuk mencetak hanya nama pekerja (lajur 1) ke fail baru:

$ awk 'print $ 1' sample_file.txt> nama pekerja.txt

Saya mengesahkan melalui perintah kucing bahawa fail baru hanya mengandungi nama pekerja.

Contoh 7: Gunakan awk untuk mencetak hanya baris yang tidak kosong dari fail

Awk mempunyai beberapa perintah bawaan yang boleh anda gunakan untuk menapis output. Sebagai contoh, arahan NF digunakan untuk menyimpan kiraan medan dalam rekod input semasa. Di sini, kita akan menggunakan perintah NF untuk mencetak hanya baris fail yang kosong:

$ awk 'NF> 0' sample_file.txt

Jelas sekali, anda boleh menggunakan arahan berikut untuk mencetak baris kosong:

$ awk 'NF < 0' sample_file.txt

Contoh 8: Gunakan awk untuk mengira jumlah baris dalam fail

Fungsi bawaan lain yang disebut NR menyimpan kiraan jumlah rekod input (biasanya garis) dari fail tertentu. Anda boleh menggunakan fungsi ini dalam awk seperti berikut untuk mengira bilangan baris dalam fail:

$ awk 'END print NR' sample_file.txt

Ini adalah maklumat asas yang perlu anda mulakan dengan membelah fail dengan perintah awk. Anda boleh menggunakan gabungan contoh-contoh ini untuk mendapatkan maklumat yang lebih bermakna dari fail rentetan anda melalui awk.

OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...
SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...