如何从手指而不是标准列中选择



我有一个用手指命令得到的文件,我只想保留用户的姓名和接入点。问题是有些用户是空闲的,他们有一个额外的列,所以接入点列不是标准的,所以我可以使用awk打印$z。

我有什么办法可以做到这一点吗?

事后我想,我是否可以选择那个额外的字段,然后用sedawk删除它,但是如何呢?如您所见,有些行具有我用手指选择的空闲时间,有些行不会导致用户没有空闲。我只想保留姓氏和接入点。哗啦!

文件是这样的:

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

等等...

我不知道

sed/awk,但你可以用 perl 单行来做到这一点:

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

Perl 现在几乎在所有的 *nix 系统上都有,所以希望它能为你工作。 通过您提供的数据,您可以获得:

bob surname1 athedsl-xxxxxxxxx.home.otenet.gr
john surname2 xxxxxxxxxx.dsl.hol.gr

这里有几种方法:

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

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

我不太熟悉finger命令,但我认为您可以使用这样的awk来解决这个问题:

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

这可能

对你有用:

finger | sed '/([0-9]*:[0-9]*s*)?(([^)]*))$/!d;s//2/'
Name1 surname1 athedsl-xxxxxxxxx.home.otenet.gr
Name2 surname2 xxxxxxxxxx.dsl.hol.gr

最新更新