Ada beberapa masalah di sini, beberapa yang akan menghasilkan kesalahan, dan yang lainnya hanya kesalahan ketik atau hasil dari kesalahpahaman:
The #!-line dapat dihapus, atau harus mengatakan
#!/usr/bin/awk -f
(atau apa pun lokasi awkberada di sistem Anda). Dengan garis di atas #!, Anda tidak harus memanggil skrip dengan awk -fpada baris perintah tetapi bisa menggunakan ./script.awksecara langsung, jika dapat dieksekusi. Dengan no- #!line, Anda harus menggunakan awk -fbaris perintah.
Untuk referensi nilai dalam bidang tertentu dalam data input, gunakan di $nmana nnomor bidang yang Anda maksudkan, bukan n$.
The printfstring format hanya memiliki satu format placeholder, tapi Anda memberikan tiga lembar data. Ia juga tidak memiliki tanda kurung di sekitar argumennya.
The ENDblok dapat dihapus.
Jika input memiliki pembatas bidang seperti ,atau |bukannya dibatasi pada spasi putih (spasi atau tab), Anda harus memberi tahu awktentang hal ini dengan menggunakan misalnya awk -F ','atau awk -F '|', atau dengan mengatur variabel FSke karakter yang sesuai dalam BEGINblok. Kalau tidak, skrip akan membagi catatan input salah.
Ini memberi kita skrip ( script.awk):
BEGIN {
fmt = "%-15s\t%-15s\t%-15s\n"
printf(fmt, "Author", "Name of Book", "ISBN")
printf(fmt, "------", "------------", "----")
}
{ printf(fmt, $1, $2, $3) }
Saya mengambil kebebasan untuk memperkenalkan string format yang memformat masing-masing dari tiga bidang yang dibatasi-tab sebagai string yang dibenarkan kiri. Setiap bidang mendapat ruang 15 karakter. Anda dapat dengan mudah men-tweak ini dengan mengubah fmtdi BEGINblok.
Doa itu akan
sort -t ',' -k 3,3 INPUTFILE.INPUT | awk -F ',' -f script.awk
Di sini, diasumsikan bahwa data dalam file dipisahkan koma (dan sortperintah telah diubah sesuai).
#!/bin/bash. Garis miring trailing akan menunjukkan direktori/bin/bash/dan bukanbashexecutable. Berikan sampel data dalam `INPUTFILE.INPUT, output yang Anda dapatkan, dan output yang Anda harapkan. Hampir tidak mungkin memecahkan masalah tanpa informasi ini.