0

我有一个通过手指命令获得的文件,我只想保留用户的姓名、姓氏和访问点。问题是一些用户空闲并且他们有一个额外的列,所以访问点列不是标准的,所以我可以使用 awk print $z。

有什么办法可以做到吗?

后来我想我是否可以选择那个额外的字段并稍后删除它,sed或者awk但是如何?正如您所看到的,有些线路有我用手指选择的空闲时间,有些线路不会导致用户没有空闲。我只想保留姓氏和接入点。谢谢!

该文件是这样的:

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'

第二个将括号留在原处,并留下一个额外的空间来代替空闲时间(如果有的话)。

于 2012-05-04T01:08:02.233 回答
0

我不太熟悉该finger命令,但我认为您可以使用以下方法解决此awk问题:

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

高温高压

于 2012-05-03T23:01:52.483 回答
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 回答