2

ログ ファイルをフィルタリングしようとしていますが、問題が発生しています。これまでのところ、次のような問題が発生しています。

tail -f /var/log/squid/accesscustom.log | awk '/username/;/user-name/ {print $1; fflush("")}' | awk '!x[$0]++' > /var/log/squid/accesscustom-filtered.log

目標は、次を含むファイルを取得することです

ipaddress1 username
ipaddress7
ipaddress2 user-name
ipaddress1 username
ipaddress5
ipaddress3 username
ipaddress4 user-name

accesscustom-filtered.log に保存します

ipaddress1
ipaddress2
ipaddress3
ipaddress4

accesscustom-filtered.log への出力がなくても機能しますが、 > の何かが正しく機能せず、ファイルが空になります。

編集:元の例を正しいものに変更しました

4

1 に答える 1

4

使用tee:

tail -f /var/log/squid/accesscustom.log | awk '/username/;/user-name/ {print $1}' | tee /var/log/squid/accesscustom-filtered.log

関連項目: 「tail -f」出力を別のファイルに書き込むおよびパイプ内のバッファリングをオフにする

注:スーパーユーザーの例のawkようにバッファリングしないため、コマンドgrepで特別なことを行う必要はありません。awk(詳細)

于 2013-01-16T14:27:56.590 に答える