2012-05-03 3 views
0

У меня есть файл, который я получил с командой finger, и я хочу сохранить только имя, фамилию и точку доступа пользователя. Проблема в том, что некоторые пользователи простаивают, и у них есть один дополнительный столбец, поэтому столбец точки доступа не является стандартным, поэтому я могу использовать awk print $ z.как выбрать из пальца не стандартные столбцы

Есть ли способ, которым я мог это сделать?

Я подумал потом, могу ли я выбрать это дополнительное поле и удалить его позже с sed или awk но как? Как вы можете видеть, некоторые строки имеют время простоя, которое я выбрал пальцем, а некоторые не приводят к тому, что пользователи не простаивают. Я просто хочу сохранить имена фамилий и точек доступа. Thnx!

Файл выглядит так:

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

и так далее ...

+0

палец? это все еще вокруг? какой возврат ... – nhed

ответ

1

Я не знаю/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 
+0

нет! : -/did not work ... –

+0

попробуйте еще раз, я отредактировал его, я был слишком буквальным с вашими данными примера ... – Benj

0

Я не очень знаком с командой finger, но я думаю, что вы можете решить это с помощью awk так:

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

НТН

+0

Замените '' \ t "' на ',' в инструкции печати if вам не нравится tab-sep vals. – Steve

0

Это может работать для вас:

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

Вот несколько способов:

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

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

Второй оставляет скобки на месте и оставляет дополнительное пространство в месте времени простоя, если таковые имеются.