2012-05-03 38 views
0

我有一個文件,我用手指命令,並且我只想保留用戶的名字,姓氏和接入點。問題是有些用戶閒置,並且他們有一個額外的列,所以訪問點列不是標準的,所以我可以使用awk print $ z。如何從手指中選擇不是標準列

有沒有什麼辦法可以做到這一點?

我之後想過如果我可以選擇額外的字段並在稍後用sedawk刪除它,但是如何?正如你所看到的,有些行有空閒時間,我用手指選擇了一些空閒時間,有些不會導致用戶沒有空閒。我只想保留名字和接入點。日Thnx!

的文件是這樣的:

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

等等...

+0

手指?這仍然是?什麼是倒退... – nhed

回答

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 
+0

不! : - /沒有工作... –

+0

現在再試一次我已經編輯了它,我對你的示例數據有點過於字面化...... – Benj

0

我不是很熟悉的finger命令,但我認爲你可以解決使用awk這是這樣的:

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

HTH

+0

用','在print語句中替換'「\ 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' 

第二個離開括號到位,並留下一個額外的空間到位的空閒時間,如果有的話。