2016-04-18 17 views
2

変数のユーザー名に基づいてユーティリティの出力を最後にフィルタリングしたいと思います。sedで一致する各パターンの最初の行を出力します

これは私は何をしたいのは、最後の出力はsedのためのパイプが

reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09)  
user1 pts/0  server Wed Apr 6 13:08 - 13:15 (00:06)  
reboot system boot system Wed Apr 6 13:08 - 13:15 (00:06)  
user1 pts/0  server Wed Apr 6 13:06 - down (00:01)  
reboot system boot system Wed Apr 6 13:06 - 13:07 (00:01)  
user1 pts/0  server Wed Apr 6 12:59 - down (00:06) 

で、フィルタリングされていない最後の出力例です。次に、sedを使用して、指定された各ユーザ名の最初の出現、つまりwtmpの最後のログエントリを表示します。出力は

reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09)  
user1 pts/0  server Wed Apr 6 13:08 - 13:15 (00:06) 

、ように表示される必要があり、私は特に好きなsedの式は

last|sed '/user1/{p;q;}' 

は、残念ながら、これは私だけ1つのユーザ名の最初の出現にマッチする機能を提供します、です。この構文を使用すると、複数のユーザー名を指定することができます。前もって感謝します!

答えて

2

awkが原因連想配列を使用するためにはawkの能力にここsedより良いフィット感です:

last | awk '!seen[$1]++' 

reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09) 
user1 pts/0  server Wed Apr 6 13:08 - 13:15 (00:06) 
+0

これは美しく動作しますが、しかし私は、グループ内のユーザ名によってフィルタリングしていると私はいくつかの名前が、管理者のように省略される必要があります。 – Mozzy

+0

** awkのようなものもawkで省略することができます!/ administrator/&&!seen [$ 1] ++ ''** – anubhava

関連する問題