Sejauh ini saya memiliki skrip saya (script.sh) sebagai:
#!/bin/bash/
BEGIN {
print "Author Name of Book ISBN"
print "------ ------------ ----"
}
{ printf "%-9s &s\n", 1$, 2$, 3$ }
END
Lalu saya menjalankan perintah:
sort -k 3,3 INPUTFILE.INPUT | awk -f script.sh
Tidak ada yang berfungsi sesuai kebutuhan.
Juga sebagai catatan, file input memiliki data yang dipisahkan oleh koma. Saya juga harus menggunakan "loop" yang saya harap perintah awk lakukan.
#!/bin/bash
. Garis miring trailing akan menunjukkan direktori/bin/bash/
dan bukanbash
executable. Berikan sampel data dalam `INPUTFILE.INPUT, output yang Anda dapatkan, dan output yang Anda harapkan. Hampir tidak mungkin memecahkan masalah tanpa informasi ini.awk -f
(yang hanya akan memperlakukannya sebagai komentar)Jawaban:
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(atau apa pun lokasi
awk
berada di sistem Anda). Dengan garis di atas#!
, Anda tidak harus memanggil skrip denganawk -f
pada baris perintah tetapi bisa menggunakan./script.awk
secara langsung, jika dapat dieksekusi. Dengan no-#!
line, Anda harus menggunakanawk -f
baris perintah.Untuk referensi nilai dalam bidang tertentu dalam data input, gunakan di
$n
manan
nomor bidang yang Anda maksudkan, bukann$
.The
printf
string format hanya memiliki satu format placeholder, tapi Anda memberikan tiga lembar data. Ia juga tidak memiliki tanda kurung di sekitar argumennya.The
END
blok dapat dihapus.Jika input memiliki pembatas bidang seperti
,
atau|
bukannya dibatasi pada spasi putih (spasi atau tab), Anda harus memberi tahuawk
tentang hal ini dengan menggunakan misalnyaawk -F ','
atauawk -F '|'
, atau dengan mengatur variabelFS
ke karakter yang sesuai dalamBEGIN
blok. Kalau tidak, skrip akan membagi catatan input salah.Ini memberi kita skrip (
script.awk
):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
fmt
diBEGIN
blok.Doa itu akan
Di sini, diasumsikan bahwa data dalam file dipisahkan koma (dan
sort
perintah telah diubah sesuai).sumber