Tutorial awk lengkap untuk Linux: panduan langkah demi langkah yang praktikal

Kemaskini terakhir: 15/12/2025
Pengarang Ishak
  • awk ialah alat dan bahasa skrip yang berorientasikan pemprosesan teks mengikut baris dan lajur, sesuai untuk menapis, mengubah dan menganalisis output arahan dan fail.
  • Ia membolehkan anda menentukan corak dan tindakan dengan menggabungkan ungkapan biasa, pembolehubah khas seperti $0, $1, NF atau NR, dan fungsi seperti panjang, substr atau padanan untuk membuat penapis yang sangat tepat.
  • awk berfungsi dengan selesa dengan pembatas dan medan menggunakan FS, OFS dan pilihan seperti -F, dan boleh format output dengan print dan printf, melaksanakan operasi matematik dan mengurus pembolehubah dengan -v.
  • Anda boleh mencipta skrip awk lengkap yang mengautomasikan tugas kompleks, termasuk carian dan penggantian dengan gsub, pengiraan lanjutan dan menjana laporan daripada arahan seperti ps, df atau fail sistem.

tutorial awk tentang Linux

Apabila anda mula mengambil konsol dengan serius Linux Anda mendapati bahawa bekerja dengan teks bukan sekadar melihat fail dengan cat Dan itu sahaja. Sebaik sahaja anda masuk ke dalam balak Untuk senarai besar proses, output arahan atau fail CSV, anda memerlukan sesuatu yang jauh lebih berkuasa untuk menapis, mengubah dan meringkaskan data tanpa membuat diri anda gila.

Di situlah awk memainkan peranan.: arahan yang, lebih daripada sekadar penapis mudah, secara praktikalnya merupakan bahasa pengaturcaraan Awk ialah alat pemprosesan teks yang membolehkan anda mencari corak, memilih lajur, melakukan pengiraan, menentukan syarat, menggunakan pembolehubah, gelung, fungsi dan juga menulis skrip lengkap. Dalam tutorial awk untuk Linux ini, kita akan menerokanya langkah demi langkah, daripada asas hingga kegunaan yang agak lanjutan, menggabungkan pelbagai jenis contoh konsol dunia sebenar.

Apakah awk dan untuk apa ia digunakan dalam Linux?

Awk ialah alat baris arahan dan juga bahasa skrip Direka untuk menganalisis teks yang berstruktur dalam baris dan medan, namanya berasal daripada inisial penciptanya (Aho, Weinberger dan Kernighan). Ia telah digunakan sejak akhir 70-an, tetapi kekal sebagai komponen penting dalam mana-mana persekitaran. Unix atau GNU/Linux (contohnya, untuk Jalankan Unix lama pada PC anda).

Falsafah awk sangat mudah: Meleret melalui fail (atau output arahan) baris demi baris, membahagikan setiap baris kepada lajur mengikut pemisah, menyemak sama ada syarat dipenuhi dan jika ya, melaksanakan tindakan. Jika anda tidak menentukan syarat, tindakan tersebut akan digunakan pada semua baris; jika anda tidak menentukan tindakan, tindakan lalai adalah untuk mencetak keseluruhan baris.

Dengan mekanisme mudah ini, anda boleh melakukan perkara yang benar-benar keterlaluan.: daripada hanya menunjukkan beberapa lajur ps o df...untuk mengira jumlah, menapis mengikut corak kompleks dengan ungkapan biasa, menggantikan teks, memformat laporan, bekerja dengan fail CSV atau menulis skrip beberapa dozen baris.

Walaupun awk mungkin mengingatkan anda sedikit tentang grep atau sedPendekatannya lebih berstruktur: fikirkan baris sebagai rekod dan perkataan (atau medan) sebagai lajur, dengan pembolehubah dalaman dan bahasa mini yang menjadikannya sesuai untuk memproses data jadual dengan cepat.

Dalam praktiknya, jika anda ingin mula menulis skrip shell yang betul...Ia hampir wajib untuk mengetahui awk bersama-sama dengan utiliti lain seperti sed, grep, cut dan syarikat. Ia merupakan blok binaan asas pemprosesan perkataan dalam Linux.

Pasang dan jalankan awk (gawk) pada sistem anda

Dalam kebanyakan pengedaran GNU/Linux modenawk telah dipasang secara lalai, biasanya dalam varian GNU awk (gawkAnda boleh menyemaknya dengan:

awk --version

Jika atas sebab tertentu anda tidak memasangnyaDalam Debian, Ubuntu dan derivatif anda boleh menggunakan pengurus pakej:

sudo apt update && sudo apt install gawk

Ia juga tersedia pada macOS.Anda boleh menggunakan versi sistem atau memasang versi terkini dengan Homebrew:

brew install gawk

Setelah dipasang, awk sentiasa digunakan dengan idea yang sama.Anda menghantar arahan antara tanda petikan tunggal dan fail (atau menghantar output arahan lain). Contohnya:

awk '{print}' archivo.txt

Anda juga boleh menggunakan awk sebagai penterjemah skrip, menunjukkan laluan ke fail boleh laku dalam baris pertama fail:

#!/usr/bin/awk -f

dan kemudian menjalankan skrip secara langsung atau dengan awk -f script.awk.

Sintaks asas: corak dan tindakan

Menggunakan awk dalam terminal

Struktur minimum awk ialah:

awk 'patrón { acción }' fichero

Setiap baris fail dibandingkan dengan corak.Jika ia sepadan, tindakan dalam kurungan kerinting akan dilaksanakan. Jika anda mengabaikan corak, tindakan tersebut akan digunakan pada semua baris. Beberapa idea utama:

Pembolehubah khas untuk merujuk kepada setiap baris:

  • $0: baris lengkap.
  • $1, $2, $3, …: medan (lajur) baris, dipisahkan oleh pembatas yang ditakrifkan.
  • NF: bilangan medan dalam baris semasa.
  • NR: nombor pendaftaran semasa (nombor talian global).
  • FNR: nombor baris dalam fail semasa, berguna apabila memproses berbilang fail.

Arahan khas:

  • BEGIN { … }: blok yang dilaksanakan sebelum membaca sebarang baris.
  • END { … }: blok yang dilaksanakan selepas memproses semua baris.

Perintah output yang paling biasa:

  • print: mencetak argumen yang dipisahkan oleh pemisah output (OFS(secara lalai, ruang).
  • printf: serupa dengan printf Dalam C, ia membenarkan pemformatan terperinci tanpa menambah jeda baris automatik.
  Panduan lengkap untuk menyelesaikan masalah JPEG XS dan JPG biasa

Contoh minimum untuk mencetak fail seadanya, seolah-olah ia cat:

awk '{print}' archivo.txt

Atau jika anda mahu ia juga menunjukkan panjang setiap baris:

awk '{print length, "\t", $0}' archivo.txt

Bekerja dengan lajur dan pemisah dalam awk

Salah satu kegunaan bintang awk ialah memanipulasi lajur daripada output arahan seperti ps, df atau fail seperti /etc/passwdSecara lalai, awk menganggap sebarang ruang atau tab sebagai pemisah, tetapi anda boleh menggunakan hampir sebarang pembatas.

Pilih lajur tertentu

Bayangkan jalan keluar dari ps dengan beberapa lajur (PID, TTY, TIME, CMD…)Jika anda hanya mahu melihat PID, sila:

ps | awk '{print $1}'

Jika anda berminat dengan lajur kedua (contohnya, TTY):

ps | awk '{print $2}'

Dan jika anda ingin melangkau baris pertama (tajuk)Anda boleh menapis mengikut nombor pendaftaran:

ps | awk 'NR>1 {print $1}'

Ideanya sangat mudah.: setiap nombor selepas simbol $ Ia merujuk kepada lajur yang sepadan, sentiasa berkenaan dengan pemisah semasa.

Tukar pembatas dengan -F dan dengan FS

Banyak fail sistem tidak dipisahkan oleh ruang.tetapi oleh orang lain simbolKlasik ialah /etc/passwddi mana medan dipisahkan oleh :Untuk memproses fail tersebut mengikut lajur, anda mempunyai dua pilihan: pilihan -F pada baris arahan, atau pembolehubah FS di dalam sebuah blok BEGIN.

Menggunakan -F pada baris arahan:

cat /etc/passwd | awk -F ":" '{print $1}'

Contoh ini hanya menunjukkan nama pengguna (medan pertama) kerana pemisah kini :Jika anda juga mahukan UID dan GID (medan 3 dan 4), silakan:

cat /etc/passwd | awk -F ":" '{print $1, $3, $4}'

Masalah dengan arahan ini ialah output tersekat bersama. Jika anda tidak mentakrifkan pemisah eksplisit, anda boleh menambah ruang atau tab secara manual:

cat /etc/passwd | awk -F ":" '{print $1 " " $3 " " $4}'

Jika anda mahukan hasil yang lebih berjadualanda boleh gunakan \t untuk memasukkan tab:

cat /etc/passwd | awk -F ":" '{print $1 "\t" $3 "\t" $4}'

Alternatif dengan FS dalam blok BEGIN Ia membolehkan anda menetapkan pemisah dalam skrip awk itu sendiri:

cat /etc/passwd | awk 'BEGIN { FS=":" } {print $1 "\t" $3 "\t" $4}'

Kedua-dua pendekatan ini setara secara fungsinyawalaupun menggunakan BEGIN {FS=...} Ia biasanya lebih bersih apabila anda menulis skrip .awk yang boleh digunakan semula.

FS dan OFS: pemisah input dan output

Selain FS (Pemisah Medan), awk mempunyai OFS (Pemisah Medan Output)yang mentakrifkan bagaimana medan dipisahkan apabila anda menggunakannya print dengan koma:

cat /etc/passwd | awk 'BEGIN { FS=":"; OFS=" - " } {print $1, $3, $4}'

Dalam kes ini, anda membaca dengan : tetapi anda menulis dengan - , menghasilkan output seperti:

root - 0 - 0
daemon - 1 - 1
...

Gabungan FS/OFS ini sangat berguna untuk "memformat semula" dataContohnya, untuk menukar daripada satu format kepada format yang lain atau untuk menyediakan output yang boleh dibaca yang kemudiannya anda eksport ke sistem lain.

Dapatkan medan terakhir dengan $NF (dan yang sebelumnya)

Dalam banyak output arahanMedan yang anda minati berada di hujung, tetapi bilangan lajur yang tepat berbeza-beza. Di situlah $NF (Bilangan Medan) memudahkan hidup anda: ia sentiasa merupakan medan terakhir dalam baris semasa.

Sebagai contoh, dalam /etc/shells Laluan shell yang sah muncul di hujung setiap barisKadangkala dalam lajur kedua, kadangkala dalam lajur ketiga, dsb. Untuk mencetak hanya nama shell (bahagian selepas garis miring terakhir):

awk -F "/" '/^\// {print $NF}' /etc/shells

Jika anda hanya mahu menyimpan nilai unik (tanpa pendua), anda boleh berantai dengan uniq:

awk -F "/" '/^\// {print $NF}' /etc/shells | uniq

Dan jika apa yang menarik minat anda adalah elemen kedua terakhir laluan itu (contohnya, direktori sebelumnya), anda boleh gunakan $(NF-1) o $(NF-2):

awk -F "/" '/^\// {print $(NF-1)}' /etc/shells

awk -F "/" '/^\// {print $(NF-2)}' /etc/shells

Tapis garisan dengan corak, panjang dan keadaan logik

Awk menyerlah apabila anda mahu kekal pada baris tertentu sahaja berdasarkan corak teks, lajur tertentu atau keadaan berangka. Gabungkan ungkapan biasa, operator logik dan fungsi seperti length untuk membuat penapis yang sangat tepat.

Tapis mengikut corak dan ungkapan biasa

Cara paling langsung untuk menapis mengikut kandungan adalah dengan meletakkan ungkapan biasa di antara garis miring. Tepat sebelum kunci:

awk '/patrón/ {print}' archivo.txt

Contohnya, dengan pemergian df Anda hanya boleh memaparkan baris yang bermula dengan garis miring (sistem fail yang dipasang):

df | awk '/^\// {print}'

Jika anda mahukan partition tertentu, contohnya /dev/sda5:

df | awk '/^\/dev\/sda5/ {print}'

Anda juga boleh menapis mengikut corak pada permulaan atau penghujung baris menggunakan ^ y $:

awk '/^tmpfs/ {print}' archivo.txt
awk '/\/shm$/ {print}' archivo.txt

Dan gabungkan beberapa kriteria dengan operator logik &&Contohnya, baris yang bermula dengan tmpfs dan berakhir di /dev/shm:

df | awk '/\/shm$/ && /^tmpfs/ {print}'

Tapis mengikut lajur dan tunjukkan hanya perkara yang menarik minat anda

Selalunya anda mahu menapis bukan sahaja baris, tetapi juga lajur.Berterusan dengan df -h, anda hanya boleh memaparkan sistem fail sebenar (^/) dan kemudian simpan lajur 1, 2 dan 3:

  Overclocking selamat pada Windows 11 dengan Afterburner, AI Suite dan EasyTune

df -h | awk '/^\// {print $1 "\t" $2 "\t" $3}'

Awk juga membolehkan anda bekerja dengan medan dengan pantasContohnya, tambahkan lajur 2 dan 3 (terpakai + tersedia) untuk melihat "jumlah kapasiti" yang dikira:

df -h | awk '/^\// {print $1 "\t" $2 + $3}'

Jika anda ingin menambah unit literal "G" pada akhir hasil:

df -h | awk '/^\// {print $1 "\t" $2 + $3 "G"}'

Tapis mengikut panjang baris menggunakan length()

Fungsi ini length() mengukur bilangan aksara dalam rentetanIa biasanya digunakan dengan $0 (baris penuh), tetapi anda juga boleh menggunakannya dengan lajur tertentu.

Untuk menunjukkan hanya garisan-garisan /etc/shells dengan lebih daripada 9 aksara:

awk 'length($0) > 9' /etc/shells

Jika anda ingin melihat panjang setiap baris:

awk '{print length, "\t", $0}' /etc/shells

Anda juga boleh menapis mengikut panjang dan kemudian mencetak hanya panjangnya.:

awk 'length($0) > 9 {print length}' /etc/shells

Gabungkan berbilang syarat dengan && dan jika

Selain menggunakan ungkapan biasa pada permulaanAnda boleh menulis syarat lengkap dalam blok menggunakan if, perbandingan dan operator logik.

Contohnya, hanya menunjukkan baris df -h yang bermula dengan t dan lajur 6 yang mempunyai lebih daripada 8 aksara:

df -h | awk '/^t/ && length($6) > 8 {print $0}'

Satu lagi kes biasa ialah mencari proses mengikut medan terakhir (arahan dilaksanakan) pada output daripada ps -efMedan terakhir ialah $NFJadi anda boleh menggunakan:

ps -ef | awk '{ if ($NF == "firefox") print $0 }'

Jika anda hanya mengambil berat tentang PID dan arahan:

ps -ef | awk '{ if ($NF == "firefox") print $2, $NF }'

Garis kawalan dengan NR, julat dan panjang medan

Pembolehubah NR (Bilangan Rekod) Ia mengira berapa banyak baris yang telah dibaca setakat ini (secara global). Ini membolehkan perkara biasa seperti melangkau pengepala, mencetak julat baris tertentu atau hanya memaparkan baris pertama.

Kira baris dan tunjukkan hanya baris pertama atau kedua

Untuk mengira jumlah baris dalam fail tidak digunakan wc -l Anda boleh lakukan:

awk 'END {print NR}' archivo.txt

Jika anda hanya mahu mencetak baris pertama:

awk 'NR==1 {print}' archivo.txt

Dan untuk menunjukkan hanya baris kedua:

awk 'NR==2 {print}' archivo.txt

Cetak bermula dari baris atau julat tertentu

Untuk menunjukkan semua baris dari baris ketiga dan seterusnya Anda boleh menggunakan syarat mudah dengan > o >=:

ps -aux | awk 'NR>2 {print}'

Jika anda mahukan julat, contohnya baris 2 hingga 4 en /etc/shells:

cat /etc/shells | awk 'NR==2, NR==4 {print $0}'

Anda juga boleh mencetak nombor baris di sebelah kandungan:

cat /etc/shells | awk 'NR==2, NR==4 {print NR, $0}'

Panjang medan tertentu

Selain mengukur panjang garisan lengkapAnda boleh menyemak panjang lajur tertentu. Contohnya, untuk melihat berapa banyak aksara yang terdapat pada sistem fail (lajur 1) dalam output df -h:

df -h | awk '{print length($1) "\t" $1}'

Jika anda ingin melangkau pengepala (baris pertama), menambah NR>1:

df -h | awk 'NR>1 {print length($1) "\t" $1}'

Fungsi berguna: substr, match, RSTART dan RLENGTH

Awk merangkumi pelbagai fungsi teks yang baikDua daripada yang paling berkuasa untuk carian lanjutan ialah substr y match, yang kedua disertai oleh pembolehubah RSTART y RLENGTH.

Potong teks dengan substr()

Fungsi ini substr(cadena, inicio) o substr(cadena, inicio, longitud) Ia membolehkan anda mengekstrak subrentetan. Contohnya, untuk mengalih keluar 5 aksara pertama daripada setiap baris /etc/shells:

cat /etc/shells | awk '{print substr($0, 5)}'

Jika anda tidak mahu memproses baris pertama (contohnya, komen), anda boleh menggunakan NR:

cat /etc/shells | awk 'NR>1 {print substr($0, 5)}'

Perhatikan bahawa parameter pertama ialah rentetan (biasanya $0) dan yang kedua menunjukkan watak yang anda ingin mula tunjukkan.

Mencari corak dengan match(), RSTART dan RLENGTH

Fungsi ini match(cadena, /regex/) cari ungkapan biasa dalam rentetanJika padanan ditemui, ia mengembalikan kedudukan permulaan (berdasarkan 1) dan mengisi dua pembolehubah:

  • RSTART: kedudukan di mana corak yang ditemui bermula.
  • RLENGTH: tempoh perlawanan.

Contohnya, untuk semua baris ps -aux yang mengandungi "cpu"Anda boleh memaparkan keseluruhan baris dan kedudukan di mana corak berada:

ps -aux | awk 'match($0, /cpu/) {print $0 " Contiene \"cpu\" en la posición " RSTART}'

Jika anda juga ingin mengetahui dimensi corak yang ditemui, pakai sahaja RLENGTH di pintu keluar:

ps -aux | awk 'match($0, /cpu/) {print $0 " Posición=" RSTART " Longitud=" RLENGTH}'

Jenis carian ini digunakan secara meluas dalam analisis teks dan bioinformatikContohnya, pada fail FASTA, di mana anda berminat untuk mencari motif tertentu dalam urutan.

Operasi matematik dan pembolehubah dalam awk

Awk tidak terhad kepada memaparkan teks: membolehkan anda melaksanakan operasi berangka secara langsung pada medan, pembolehubah dalaman atau nilai yang anda luluskan dari baris arahan atau dari persekitaran shell.

  Lumpuhkan kemas kini automatik daripada Gedung Microsoft

Takrifkan pembolehubah dengan -vy dan gunakannya dalam BEGIN

Anda boleh mengisytiharkan pembolehubah dengan pilihan -v apabila memanggil awkContohnya, mendarab dua nombor tetap:

awk -v a="10" -v b="20" 'BEGIN {print "La multiplicación de a x b es", a*b}'

Ia juga mungkin untuk lulus nilai pembolehubah dari shell andaJika dalam bash anda lakukan:

a=1.5
b=4

Kemudian anda boleh menggunakannya dalam awk seperti ini:

awk -v a="$a" -v b="$b" 'BEGIN {print "La multiplicación de a x b es", a*b}'

Blok BEGIN digunakan di sini kerana kita tidak memproses sebarang fail.Kami hanya mahu melaksanakan kod sekali dan memaparkan hasilnya.

Fungsi matematik: gelung sqrt dan for

Awk menggabungkan beberapa fungsi matematik standard.Sebagai sqrt() untuk punca kuasa dua. Contohnya, punca kuasa dua bagi 400:

awk 'BEGIN {print sqrt(400)}'

Anda juga boleh menggabungkannya dengan gelung for untuk menghasilkan senarai lengkap:

awk 'BEGIN { for(i=1; i<=10; i++) print "La raíz cuadrada de", i*i, "es", i }'

Atau merentasi nilai perpuluhan dari 0 hingga 1 dalam kenaikan kecil:

awk 'BEGIN { for(i=0; i<=1; i=i+0.00001) print "La raíz cuadrada de", i*i, "es", i }'

Struktur jenis ini menjadikan awk sangat serupa dengan bahasa tradisionalwalaupun habitat semula jadinya kekal dalam format lajur.

Menulis dan menjalankan skrip lengkap dalam awk

Apabila arahan awk mula menjadi panjang Jika anda ingin menggunakan semula transformasi yang kompleks, perkara yang wajar dilakukan ialah menyimpannya dalam fail skrip dengan sambungan . .awk (walaupun tidak diperlukan).

Satu contoh tipikal melibatkan pemprosesan output daripada df untuk memaparkan hanya entri tertentu yang memenuhi syarat mengenai ruang yang tersedia dan memformat hasil sebagai jadual kecil.

Bayangkan anda mahukan yang berikut:

  • Tunjukkan hanya sistem fail yang namanya bermula dengan "t" (contohnya tmpfs).
  • Tapis yang mempunyai kapasiti tersedia (lajur 4) lebih besar daripada 6000K.
  • Cetak hanya unit (lajur 1) dan jumlah lajur 2 dan 3 sebagai anggaran jumlah ruang.

Anda boleh mencipta skrip yang dipanggil capacidad.awk dengan kandungan yang serupa dengan ini (disesuaikan dan dipermudahkan):

#!/usr/bin/awk -f
BEGIN { printf "%s\n", "Voy a extraer las partes que me interesan del comando df" }
BEGIN { printf "%s\t%s\n", "Unidad", "Capacidad disponible" }
/^t/ && $4 > 6000 {print $1 "\t" $2 + $3 "K"}

Dan kemudian laksanakannya dengan merantai output df.:

df | awk -f capacidad.awk

Jika anda ingin menambah baik penampilan meja, anda boleh menggantikan print oleh printf dan menggunakan format seperti %-12s (teks dijustifikasikan ke kiri dalam 12 aksara) atau %-23d (Nombor perpuluhan dalam 23 aksara). Ini memberi anda kawalan sempurna ke atas penjajaran lajur.

Cari dan gantikan teks dengan gsub()

Awk juga boleh melakukan penggantian teks serupa dengan apa yang anda akan lakukan dengan sed, menggunakan fungsi tersebut gsub() (pengganti global).

Sintaks umum ialah:

gsub("texto_o_regex_a_buscar", "texto_de_reemplazo", destino)

Contohnya, katakan fail geekland.txt dengan teks "Geekland ialah blog teknologi terbaik" dan anda ingin menukar huruf awal G kepada g:

awk '{ gsub("G", "g", $0); print $0 }' geekland.txt

Jika anda tidak menentukan parameter ketiga, carian akan dilakukan pada $0 secara lalaiWalau bagaimanapun, adalah sangat biasa untuk mengehadkan penggantian kepada satu lajur:

df -h | awk '{ gsub("M", "G", $2); print $2 }'

Dalam kes ini, kita hanya menukar unit M kepada G dalam lajur 2Jika anda juga ingin menunjukkan lajur 1 yang sejajar dengan betul, anda boleh menggabungkannya dengan printf:

df -h | awk '{ gsub("M", "G", $2); printf "%-12s %-12s\n", $1, $2 }'

Corak "Saya mengubah suai lajur dan kemudian mencetak diformat" Ia sangat berguna dalam laporan, migrasi data atau pembersihan output arahan yang cepat.

Kegunaan tambahan: kucing yang dijangkiti steroid dan pelaksanaan arahan

Walaupun ia mungkin kelihatan bodohawk boleh bertindak sebagai cat Diperbaiki, kerana ia boleh memaparkan fail sambil menambah maklumat tambahan (nombor baris, panjang, dll.).

Penggunaan yang remeh akan menjadi:

awk '{print}' functions.php

Tetapi anda juga boleh menomborkan garisan atau menggunakan sebarang penapis. tanpa perlu menggunakan sebarang alat tambahan.

Satu lagi fakta menarik ialah awk boleh melaksanakan arahan sistem mengikut fungsi system()Contohnya, untuk memaparkan direktori semasa:

awk 'BEGIN { system("pwd") }'

Ini bukanlah amalan yang paling biasa dalam skrip mudah.Tetapi adalah baik untuk mengetahui ia wujud apabila anda membina alat yang lebih kompleks berdasarkan awk.

Awk menjadi pisau Swiss Army untuk teks dalam LinuxIa membolehkan anda menapis baris, memilih dan menggabungkan lajur, menggantikan serpihan, mengukur panjang, mencari corak, menjumlahkan medan, menjana laporan berformat kecil dan juga membina skrip lengkap yang memproses output arahan lain. Sebaik sahaja anda mahir, ia menjadi alat penting apabila anda bekerja dengan... terminal dan data berstruktur.

menjalankan tutorial unix purba
artikel berkaitan:
Cara menjalankan UNIX warisan pada PC anda: SIMH, Docker, V7/V8, BSD dan banyak lagi