我有一个用手指命令得到的文件,我只想保留用户的姓名和接入点。问题是有些用户是空闲的,他们有一个额外的列,所以接入点列不是标准的,所以我可以使用awk打印$z。
我有什么办法可以做到这一点吗?
事后我想,我是否可以选择那个额外的字段,然后用sed
或awk
删除它,但是如何呢?如您所见,有些行具有我用手指选择的空闲时间,有些行不会导致用户没有空闲。我只想保留姓氏和接入点。哗啦!
文件是这样的:
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