![このスクリプトの出力ラインを一意に印刷し、各行の繰り返し回数を印刷する方法[閉じる]](https://linux33.com/image/155545/%E3%81%93%E3%81%AE%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%87%BA%E5%8A%9B%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%92%E4%B8%80%E6%84%8F%E3%81%AB%E5%8D%B0%E5%88%B7%E3%81%97%E3%80%81%E5%90%84%E8%A1%8C%E3%81%AE%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E5%9B%9E%E6%95%B0%E3%82%92%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
#!/bin/bash
who |grep "10\.1\.109" | grep -v berianho | cut -f1 -d " " | sort -n|
while read user
do
grep -a ^$user: /etc/passwd | cut -f5 -d:
done
答え1
単純なPerlスクリプト...
#!/usr/bin/perl
my %hash;
open FH, 'who |' or die;
while ( <FH> ) {
$hash{$1}++ if /^(\S+).*(10\.\d+\.\d+\.\d+)/;
}
close FH;
while ( ($k,$v) = each %hash ) {
printf "%3d %s\n", $v, $k;
}
exit;
答え2
これがあなたが望むものについての私の仮定です。
#!/bin/bash
list="$(who |grep "10\.1\.109" | grep -v berianho | cut -f1 -d " ")"
unique="$(echo ${list} | tr ' ' '\n' | sort | uniq)"
for student in $unique
do
echo "Student $(grep -a ^${student}: /etc/passwd | cut -f5 -d ":" ) has number of $(echo "$list" | tr ' ' '\n' | grep ${student} | wc -l) logins."
done
出力例では、AAAの3項目(passwdの場合はAAA AAAと呼ばれます)、BBBの場合は1つの項目(passwdの場合はBBB BBBと呼ばれます)、CCの場合は1つの項目(passwdの場合はCCC CCCと呼ばれます)があるとしますwho
。出力は次のようになります。
Student AAA AAA has number of 3 logins.
Student BBB BBB has number of 2 logins.
Student CCC CCC has number of 1 logins.