Shell Script: Log Di Antara 2 Kata Kunci (Keywords)
Selepas ini tidak perlu lagi, nak scroll panjang-panjang
Beberapa bulan lepas, salah satu ahli dalam pasukan Data Engineer sedang troubleshoot satu isu untuk sebuah pipeline batch. Dia menghadapi masalah untuk membuat analisa kerana log pipeline tersebut hanya berlaku dalam tarikh yang tertentu sahaja.
Sebelum itu, mari kita mendalami format log yang digunakan (ini hanyalah contoh entri log). Sample log boleh diambil di sini
....
....
....
Start Log 20241201
....
....
....
End Log 20241201
Start Log 20241202
....
....
....
End Log 20241202
....
....
....
Berdasarkan contoh ini, kita dapat mengesan pola log tersebut. Yang mana setiap hari akan ada keyword Start Log <Tarikh>
dan End Log <Tarikh>
.
Jadi untuk mendapatkan log diantara tarikh tertentu, berikut adalah shell script yang boleh digunakan. Shell script ini menggunakan awk
sebagai command utama untuk menapis log yang diperlukan.
Nama file: get_log_between_keyword.sh
#!/bin/bash
# Check if the correct number of arguments is provided
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <start_keyword> <end_keyword> <file>"
exit 1
fi
# Assign arguments to variables
start_keyword=$1
end_keyword=$2
file=$3
# Check if the file exists
if [ ! -f "$file" ]; then
echo "Error: File '$file' not found!"
exit 1
fi
# Use awk to extract lines between the keywords
awk -v start="$start_keyword" -v end="$end_keyword" '
$0 ~ start {flag=1}
flag {print}
$0 ~ end {flag=0}
' "$file"
Baik.
Saya bahagikan script ini kepada bahagian-bahagian berikut:
# Check if the correct number of arguments is provided
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <start_keyword> <end_keyword> <file>"
exit 1
fi
Shell kod ini gunakan untuk mendapat beberapa parameter utama:
Kata Kunci Mula - ikan
Kata Kunci Akhir - ayam
Nama file - sample.log
Ini kerana untuk menjalankan shell script ini anda perlu mengikut format berikut
sh get_log_between_keyword.sh ikan ayam sample.log
# Assign arguments to variables
start_keyword=$1
end_keyword=$2
file=$3
# Check if the file exists
if [ ! -f "$file" ]; then
echo "Error: File '$file' not found!"
exit 1
fi
Bahagian ini pula, parameter-parameter diassign kepada variable seperti berikut
start_keyword=$1
end_keyword=$2
file=$3
Jika file yang diberikan tidak wujud, script akan memberikan amaran kepada pengguna seperti berikut:
# Use awk to extract lines between the keywords
awk -v start="$start_keyword" -v end="$end_keyword" '
$0 ~ start {flag=1}
flag {print}
$0 ~ end {flag=0}
' "$file"
Bahagian ini adalah utama untuk script ini. Command awk digunakan untuk mendapatkan log yang berkaitan. Dengan menggunakan -v start
dan end
, anda memaklumkan kepada command tersebut permulaan dan pengakhir yang mencari keyword.
Kod ini akan mula print/cetak barisan dalam file pada ketika ia menjumpai keyword start
dan berhenti apabila menjumpai keyword end
. Berikut adalah contoh kod
Selamat mencuba.
Rujukan
https://www.geeksforgeeks.org/awk-command-unixlinux-examples/