Saya harus menghitung berapa banyak pengguna yang masuk setiap hari dalam seminggu. Saya bisa mendapatkan data dengan perintah terakhir di server, tetapi bagaimana saya bisa memprosesnya dengan awk? Ini adalah daftar data yang panjang, nama hari ada di kolom ke-4. Saya mendeklarasikan array seperti ini: t["Sun"]=0; t["Sab"]=0; dll, saya dapat menghitungnya dari input sederhana dari terminal, tetapi bagaimana saya bisa menggunakannya pada output terakhir?

Jika saya masuk ke server dan mengetik: terakhir, saya mendapatkan hasil seperti ini, setiap baris berisi nama pengguna, poin/sesuatu, alamat ip, hari dalam seminggu, waktu dll:

user pts/0 address Mon etc.

user pts/1 address Wed etc.

Saya ingin output seperti ini:

Mon: 10 users were logged in

Tue: 20 user were logged in etc

Kode saya ada di sini, yang berfungsi dengan input dari terminal:

awk '
        BEGIN { t["Sun"]=0; t["Sat"]=0; t["Fri"]=0; t["Thu"]=0; t["Wed"]=0; t["Tue"]=0; t["Mon"]=0; }
        { t[substr($4,i,3)]++;} 
        END {for(i in t) print i ": " t[i]}   
'$*

Sejauh ini untuk input di terminal seperti ini:

aa ss dd Fri
a d g Mon
q w e Fri

Memberikan hasil:

Wed: 0
Tue: 0
Fri: 2
Thu: 0
Sat: 0
Sun: 0
Mon: 1

Bagaimana saya bisa menggunakan perintah awk untuk memproses output yang terakhir?

2
Ann 11 April 2020, 13:37

1 menjawab

Jawaban Terbaik

Sepertinya Anda mungkin menginginkan sesuatu seperti:

last |
awk '
    BEGIN { split("Sun Mon Tue Wed Thu Fri Sat",days) }
    { numUsers[$4]++ }
    END {
        for (dayNr=1; dayNr in days; dayNr++) {
            dayName = days[dayNr]
            printf "%s: %d users were logged in\n", dayName, numUsers[dayName]
        }
    }
'

Jadi Anda selalu mendapatkan output untuk setiap hari, termasuk hari-hari ketika tidak ada yang masuk, dan hari-hari diurutkan dalam urutan hari kerja yang Anda inginkan.

0
Ed Morton 11 April 2020, 12:05