menggabungkan shell bourne dan awk

0

Ini adalah file saya yang sebenarnya WASfile

#!/bin/sh
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
Script to Add  
read -p "Press [Enter] to continue for Installation"  

Sekarang, saya ingin meletakkan skrip berikut di Script untuk Tambah di atas dan kemudian menjalankan skrip WASfile sebagai (yang merupakan kombinasi dari banyak skrip atau perintah).

#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1    

Saya ingin menggabungkan dan menggunakan seperti di bawah ini atau cara yang lebih baik untuk menggabungkan kedua skrip.

#!/bin/sh  
sed -i '/^ *$/d' WASfile  
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasdm/WASfile;  
#!/usr/bin/awk -f  

BEGIN   { FS="=" }  
NR==FNR { a[$1]=$0; next }  
$1 in a { $0=a[$1] }  
/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  
1  
read -p "Press [Enter] to continue for Installation"  

Saya tidak dapat menjalankan Script.

Jadi, saya mencoba mengekstrak naskah AWK ke file lain dan mencoba menjalankan naskah AWK itu. Tapi, masalahnya adalah setelah mengekstraksi, skrip utama WASfile sendiri rusak atau gagal.

#!/bin/sh
sed -i '/^ *$/d' WASfile;
sed -i -e '/\/usr\/bin\/awk/,/baba/{w 1' -e 'd}' WASfile;
#!/usr/bin/awk -f

BEGIN   { FS="=" } NR==FNR { a[$1]=$0; next } $1 in a { $0=a[$1] } /^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } } 1
baba
read -p "Press [Enter] to continue for Installation"

seperti di bawah ini

#./WASfile
sed: -e expression #1, char 24: missing command
./WASfile: line 6: BEGIN: command not found
./WASfile: line 7: {: command not found
./WASfile: line 7: next: command not found
./WASfile: line 8: in: command not found
./WASfile: line 9: syntax error near unexpected token `/^#/,'
./WASfile: line 9: `/^#/    { var=$1; sub(/^#/, "", var); if(var in a) { $0=a[var] } }  '
pengguna2692634
sumber
Anda menjelaskan bahwa skrip pertama disimpan di dalam file yang dipanggil WASfiletetapi dalam skrip yang sama Anda mengedit file dengan nama yang sama dua kali ( WASfiledan dengan path lengkap /home/wasadm/WASfile). Apakah seharusnya file yang sama dan Anda benar-benar ingin membuat kode modifikasi diri? Atau apakah Anda hanya menggunakan nama yang sama untuk skrip dan file yang sedang diedit? --- Saya akan sangat mencegah Anda dari kode modifikasi diri. Anda akan membutuhkan lebih banyak pengetahuan untuk membuatnya berfungsi dengan benar.
pabouk

Jawaban:

0

Dari pertanyaan Anda, saya mengerti bahwa skrip pertama Anda disimpan dalam file bernama WASfile. Anda harus memastikan bahwa skrip memiliki set bit yang dapat dieksekusi:

chmod a+x WASfile

Kemudian Anda dapat menjalankan script: ./WASfile. Karena direktori saat ini tidak dalam PATHvariabel secara default, Anda harus secara eksplisit menentukan jalur untuk direktori saat ini ./atau jalur absolut /home/wasadm/WASfile.

Hal yang sama berlaku untuk skrip AWK: membuatnya dapat dieksekusi dan menyebutnya dengan jalur yang ditentukan.

Dari WASfileskrip Anda dapat menyebutnya dengan cara yang sama seperti dari baris perintah. Baris perintah juga merupakan shell - baik sama atau mirip dengan shell yang mengeksekusi skrip pertama.

#!/bin/sh
sed -i '/^ *$/d' WASfile
sed -i -e '/user=/,/group_1=/{w /tmp/1' -e 'd}' /home/wasadm/WASfile
/path/to/the/AWKscript inputfile1 inputfile2 >outputfile1
read -p "Press [Enter] to continue for Installation"

Kode di atas akan menjalankan AWKscriptskrip yang disimpan di dalam /path/to/thedirektori. Dengan file sebagai parameter dengan nama deskripsi sendiri. Letakkan file yang Anda butuhkan di sana.

Pilihan lain adalah memanggil awksecara eksplisit. Dalam kasus seperti itu Anda tidak perlu mengaktifkan bit file yang dapat dieksekusi.

awk -f /path/to/the/AWKscript

Potongan kode terakhir dalam pertanyaan tidak akan berfungsi

Kombinasi yang ditunjukkan di bagian terakhir kode Anda tidak akan berfungsi. Sistem mirip Unix dirancang untuk mengeksekusi satu file yang dapat dieksekusi oleh satu juru bahasa.

pabouk
sumber
saya mengedit pertanyaan saya sesuai saran Anda. Silakan periksa.
user2692634
@ user2692634: Silakan baca balasan saya. Itu masih berlaku. Jika Anda tidak mengerti sesuatu, tolong beri tahu saya. Mengenai sedkode, komentar lama saya masih berlaku.
pabouk