0

fingerコマンドで取得したファイルがあり、ユーザーの名前、名前、アクセスポイントのみを保持したい。問題は、一部のユーザーがアイドル状態で、追加の列が1つあるため、アクセスポイントの列が標準ではないため、awk print$zを使用できることです。

私がそれをすることができる方法はありますか?

その後、その余分なフィールドを選択して、後で削除できるかどうかを考えましsedawk。ご覧のとおり、一部の回線には、指で選択したアイドル時間があり、一部の回線では、ユーザーがアイドル状態になっていないことがわかります。名前の名前とアクセスポイントを保持したいだけです。Thnx!

ファイルは次のようなものです:

Name1 surname1 22:04 (athedsl-xxxxxxxxx.home.otenet.gr)
Name2 surname2 (xxxxxxxxxx.dsl.hol.gr)
.
.
.

等々...

4

4 に答える 4

1

sed / awkはわかりませんが、perlのワンライナーでこれを行うことができます。

cat file | perl -ne 'if (/(\w+)\s+(\w+).*\((.*)\)/) { print "$1 $2 $3\n" }'

最近のPerlは事実上すべての*nixシステム上にあるので、うまくいけばうまくいくでしょう。提供したデータを使用すると、次のようになります。

bob surname1 athedsl-xxxxxxxxx.home.otenet.gr
john surname2 xxxxxxxxxx.dsl.hol.gr
于 2012-05-03T21:12:58.113 に答える
1

いくつかの方法を次に示します。

awk '{gsub(/^\(|\)$/, "", $NF); print $1, $2, $NF}'

awk 'NF == 4 {$3 = ""}1'

2 番目のものは括弧をそのままにして、アイドル時間の代わりに余分なスペースを残します (ある場合)。

于 2012-05-04T01:08:02.233 に答える
0

これはあなたのために働くかもしれません:

finger | sed '/\([0-9]*:[0-9]*\s*\)\?(\([^)]*\))$/!d;s//\2/'
Name1 surname1 athedsl-xxxxxxxxx.home.otenet.gr
Name2 surname2 xxxxxxxxxx.dsl.hol.gr
于 2012-05-03T23:27:27.170 に答える
0

コマンドにはあまり詳しくありませんが、次のようfingerに使用してこれを解決できると思います。awk

finger | awk 'NR >= 2 { gsub ("[\\(|\\)]","",$NF); print $1"\t"$3"\t"$NF }'

HTH

于 2012-05-03T23:01:52.483 に答える