2012-02-11 42 views
4

我有一個腳本,從手指的輸出中刪除空閒列的腳本。用Bash刪除文本文件中的列?

>finger 
Login Name     TTY Idle Login Time Office Phone 
Billy Billy Howard  *con 6:55 Fri 19:03 
Billy Billy Howard   s00  5 Fri 19:11 
Billy Billy Howard   s00  Sat 00:27 

我試圖刪除與TR多餘的空格,然後用切割與空間的分隔符來刪除該列,但因爲空閒可以沒有價值我有時會得到錯誤的值,因爲TR分隔空間是在空閒時間應該是...有誰知道我可以如何刪除空閒列?

finger | cut --complement -c36-40 

回答

3

該解決方案並不完美:列位置和寬度可能會改變。如果它們是不變的,下面的命令將通過刪除包含文本列34到39來完成這個技巧:

finger | colrm 34 39 
+0

我所要做的就是用awk找到Idle的索引,然後使用該程序。謝謝! fingerOutput ='finger | head -n1' idleIndex ='awk -v a =「$ fingerOutput」-v b =「Idle」'BEGIN {print index(a,b)}'' – Homeschooldev 2012-02-14 15:13:55

7

這可能會爲你工作:

finger | sed 's/\(.\{35\}\)...../\1/' 

或本。例如:

finger | awk -F"\t" -v 'OFS=\t' '{ $4=""; print $0}' | sed 's/\t\{2,\}/\t/' 
3

如果"\t"用作列分隔符,那麼你可以使用awk擺脫第四列,並使用sed一倍"\t"刪除: